2017-02-18 74 views
1

我正在从Matlab重写一个程序到Python。 我意识到数组之间的乘法差异。这里有一个例子:Numpy和Matlab在数组乘法中的区别

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相同的结果呢?

谢谢。

+2

你看到**'**在Matlab代码?是的,这很重要,不会反映在你的Python代码中:-)。提示:**复共轭转置运算符**。 – sascha

回答

4

首先要记住,在MATLAB中,'.'不同。

'确实complex conjugate transpose

.'确实non-conjugate transpose

在真实值矢量或矩阵无论是运营商获得类似的结果。但是,对于复数矢量或矩阵,它们会得到不同的结果。检查链接以查找两者的matlab示例。

在MATLAB中,你可以做到以下几点:

A.'*A 

ans = 

    -2.172340517799748e+07 + 3.941808503424492e+07i 
+2

很少有人知道Matlab中'。''和'''的区别。大多数人只会使用'''。干得好+1 –

+0

谢谢,非常有用的回复。你知道如何获得Numpy的A'* A操作吗? –

+0

通过@hpaulj检查答案 – NKN

2

在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) 

在八度,在对方的回答中指出

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

谢谢,的确我想获得Numpy的A *操作! –

+0

为我的答案添加'.real'以删除'0j'部分。 – hpaulj

+0

plus-one对于Python方面的答案! :) +1 – NKN

1

为了获得Numpy的Matlab操作,你可以这样做:

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

谢谢!