2017-02-18 77 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)) 

謝謝!