Matlab vs Numpy 内积,不同的结果

Luc*_*ann 2 python matlab translation numpy

我正在将一些旧的 Matlab 代码翻译成 python。我遇到了一些我不理解的行为,并且我没有找到正确的答案:

我想将两个包含复数的向量与内积相乘,因此我希望得到一个复数标量。这是 Matlab 的 MWE(我在 Octave 中运行它,所以也许这是一个问题?):

a = [-0.21+0.58i -0.02-0.23i 0.23-0.39i];
b = [ 1.41-1.63i -0.46+0.69i -1.11+1.08i];
a*b'
ans = -2.06750 + 0.77960i

Run Code Online (Sandbox Code Playgroud)

python 中也有同样的事情:

a = np.array([-0.21+0.58j, -0.02-0.23j ,
        0.23-0.39j])
b = np.array([1.41-1.63j, -0.46 +0.69j,
       -1.11+1.08j])
a@b
(0.9830999999999999+1.9333999999999998j)
Run Code Online (Sandbox Code Playgroud)

我对 Matlab 不太了解,但我试图尽可能多地找到有关 python/numpy 差异的信息,但找不到任何方法在 python 中获得相同的结果。有人知道我在这里做错了什么吗?

最佳卢卡斯

Qua*_*ang 5

我相信b'Matlab 是conjugate用 Python 编写的,所以你想要

a@b.conj()
# (-2.0675+0.7796000000000001j)
Run Code Online (Sandbox Code Playgroud)

这是正确的内积,而a@b(在数学上)不是内积。

  • `numpy` 有类似 `vdot` 的东西,它使用 `conj` (4认同)
  • 为清楚起见,请注意 MATLAB dot( ) 函数(即内积)将共轭放在第一个参数而不是第二个参数上。例如,如果 MATLAB 中有复数列向量 a 和 b,则 dot(a,b) 相当于 a' * b。其他网站(例如维基百科)将共轭放在第二个参数上。因此,如果您为此操作调用预先固定的点积函数,请务必小心,并确保您知道共轭与您所需的操作数相符。根据 NumPy 文档,vdot( ) 函数也将共轭放在第一个参数上,就像 MATLAB 一样。 (2认同)