2017-07-31 20 views
0

這裏是一段代碼我寫道:CMATH模塊產量不正確的結果

import numpy as n 
import cmath, math 

v=[1,1,1,1,1][(1+0j), (0.30901699437494723+0.9510565162951536j), (-0.8090169943749477+0.5877852522924728j), (-0.8090169943749471-0.5877852522924736j), (0.3090169943749482-0.9510565162951533j)] 



M=[[0]*5]*5 
w=[0]*5 
for a in range(0,5,1): 
    for b in range(0,5,1): 
     M[a][b]=cmath.exp(-2j*math.pi*a*b/5) 

for k in range(0,5,1): 
    for i in range(0,5,1): 
     w[k]+=M[k][i]*v[i] 

print M[0] 

這裏的輸出:

[(1+0j), (0.30901699437494723+0.9510565162951536j), (-0.8090169943749477+0.5877852522924728j), (-0.8090169943749471-0.5877852522924736j), (0.3090169943749482-0.9510565162951533j)] 

然而,它應該是[1,1,1,1,1] 。我試圖找出代碼中是否有任何問題,但我不能。我的代碼有什麼問題?

回答

1

您的初始化矩陣M出錯了;這是你可以如何修復它:

M = [[0]*5 for i in range(5)] 
# this would also work: 
# M = [[0 for j in range(5)] for i in range(5)] 

這個問題被描述,例如,在this answer

短版本:矩陣中的所有行都指向相同的列表。其中一行的更改會反映在每一行中。

(順便說一句,range(0, 5, 1)通常只是寫爲range(5)

+1

要添加到Hiro的答案,因爲你已經使用'numpy',可能是最好的方式來創建'M'將直接創建一個'array'與'M = n.zeros((5,5))'。 –