Numpy 和 Matlab 在数组乘法方面的区别

Difference between Numpy and Matlab in multiplication of arrays

我正在将一个程序从 Matlab 重写到 Python。 我意识到数组之间的乘法不同。这是一个例子:

 A   = [-1822.87977846-4375.93518777j 
        3675.88618351+3824.34290883j
        971.68964707-2393.36758923j]

在 Matlab 中:

A*A'= 5.7282e+07

在Python中:

np.dot(A,A) = -21723405.178+39418085.0343j

如何在Numpy中获取A'*A的相同结果?

谢谢。

首先请记住,在 MATLAB 中,' 不同于 .'

' complex conjugate transpose

.'non-conjugate transpose

在实值向量或矩阵上,两个运算符获得相似的结果。然而,在复杂的向量或矩阵上,它们会得到不同的结果。检查链接以找到两者的 matlab 示例。

在 MATLAB 中,您可以执行以下操作:

A.'*A

ans =

     -2.172340517799748e+07 + 3.941808503424492e+07i

在Python那边

In [488]: A=np.array( [-1822.87977846-4375.93518777j ,
     ...:         3675.88618351+3824.34290883j,
     ...:         971.68964707-2393.36758923j])
In [489]: A
Out[489]: 
array([-1822.87977846-4375.93518777j,  3675.88618351+3824.34290883j,
         971.68964707-2393.36758923j])
In [490]: A.conj()
Out[490]: 
array([-1822.87977846+4375.93518777j,  3675.88618351-3824.34290883j,
         971.68964707+2393.36758923j])
In [491]: A.dot(A.conj())
Out[491]: (57281826.560119703+0j)
In [492]: A.dot(A)
Out[492]: (-21723405.177997477+39418085.034244925j)
In [497]: np.vdot(A,A)
Out[497]: (57281826.560119703+0j)

在 Octave 中,正如其他答案中指出的那样

>> A'*A
ans =    5.7282e+07
>> A.'*A
ans = -2.1723e+07 + 3.9418e+07i
>>

要获取A*A'Matlab在Numpy中的运算,可以这样做:

np.dot(A,np.conj(A))

谢谢!