2016-04-09 50 views
-1

我目前正在編寫一個程序,其中定義了兩個數組,然後進行奇異值分解,然後進行其他一些處理以模擬一些物理。陣列的尺寸應爲D²×D²。我最初嘗試:依次爲什麼這些在Python中定義多個數組的方法給出了不同的答案?

Ma = np . zeros ([ pow(D,2), pow(D,2)]) 
Mb = np . zeros ([ pow(D,2), pow(D,2)]) 

Ma, Mb = (np.zeros([ pow(D, 2), pow(D,2)]) for i in range(2)) 

最後

Ma , Mb = [np . zeros ([ pow(D,2), pow(D,2)])]*2 

我發現,以不同的方式定義數組影響了我最後的答案,只有最後的辦法給我我期待的答案。前兩個選項給我無意義的答案。這些不同的方法實際上是否相同,或者我錯過了什麼?

編輯:

後面是代碼:其中T和D_array先前被定義

for i in D_array: 
    for j in D_array: 
     for k in D_array: 
      for l in D_array: 
       Ma[k + D * j][i + D * l] = T[i][j][k][l] 
       Mb[k + D * l][i + D * j] = T[i][j][k][l] 

。此後Ma和Mb經歷SVD,

+0

這是非常不尋常的''模塊名,並從它的功能,但它是有效的蟒蛇之間。大多數程序員會比'np更喜歡'np.zeros'。 zeros'!另外'pow(D,2)== D ** 2'。 –

+0

定義「無意義」。你期待什麼**?你得到了什麼? –

+2

你得到兩個引用到同一個對象,很常見的問題 –

回答

4

最後一種方法將有Ma is Mb返回true。我覺得奇怪,這會是你的願望

的情況下本質上,最後一個是相當於Mb = Ma = np . zeros ([ pow(D,2), pow(D,2)])

+0

所以你說我每次編輯'Ma',那麼'Mb'會出現相同的編輯? – user138901

+0

你可能想提一下,編寫它的正確方法是列表理解,如'[np。零([pow(D,2),pow(D,2)])的範圍(2)中的_],但這可能不會太冗長,然後只寫兩次語句。 –

+0

@ user138901,是的,它們指向相同的對象,所以它用來修改它的指針沒有區別。 (對'Ma'的改變也會出現在'Mb'上) –

相關問題