我有一個 numpy 陣列串列。我想遍歷串列并更改某些元素。下面是一個示例,但僅使用整數:
a = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
print(a)
for i in range(len(a)):
for j in range(i 1):
if i == j:
a[i][j] = 100
print(a)
This is the output:[[1, 1, 1], [1, 1, 1], [1, 1, 1]][[100, 1, 1], [1, 100, 1], [1, 1, 100]]
i==j 元素已更改為其他內容。當我運行完全相同的代碼邏輯,但使用 2x2 numpy 陣列時,我無法讓它做同樣的事情:
L=3
I = np.eye(2, dtype = int)
sigplus = np.array([[0,2],[0,0]])
plusoperatorlist=[[I]*L]*L
print(plusoperatorlist)
for i in range(len(plusoperatorlist)):
for j in range(i 1):
if i == j:
plusoperatorlist[i][j] = sigplus
print(plusoperatorlist)
This is the output:[[array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]])], [array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]])], [array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]])]][[array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]])], [array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]])], [array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]])]]
它將每個元素更改為我定義的矩陣 sigplus。所需的輸出是仍然具有單位矩陣串列的串列,但在串列串列中的 i==j 位置具有 sigplus 矩陣。非常感謝您的幫助:)
我已經概述了我在上面嘗試過的內容。
uj5u.com熱心網友回復:
問題是您通過與原始串列相乘創建了一個嵌套串列。對原始串列的參考在底層將保持不變,這意味著看似更改其中一個串列實際上會更改所有串列。嘗試生成嵌套串列,如:
plusoperatorlist= [[I for _ in range(L)] for _ in range(L)]
現在,每個嵌套串列都有自己的參考,并且可以獨立更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/454854.html
