我試圖制作一個單位矩陣來找到逆矩陣。但是由于代碼中的錯誤,我現在被困住了。一個新鮮的眼睛會有很大幫助。
identity=[]
null=[]
for i in range(3):
null.append(i*0)
for j in range(3):
identity.append(null)
for k in range(3):
identity[k][k]=1
print(identity)
我得到的結果
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
我想要什么
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
uj5u.com熱心網友回復:
您的代碼的問題是identity沒有 3 個不同的null串列,它有 3 個完全相同的null串列。這就是為什么在每次迭代中,你都改變了它們的值。
例如,如果您簡單地運行以下代碼,您會發現它不是最后一個 for 回圈:
identity[1][1]=1
print(identity)
你會發現結果是
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
如果要使用串列創建單位矩陣,可以執行以下操作:在每次i迭代中,附加一個i第 th 元素為 1 的行:
identity = []
for i in range(3):
row = [0]*3
row[i] = 1
identity.append(row)
作為一個函式:
def eye(size):
identity = []
for i in range(size 1):
row = [0]*(size 1)
row[i] = 1
identity.append(row)
return identity
eye(3)
輸出:
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
uj5u.com熱心網友回復:
派對遲到了,但是..
關鍵是,當您運行第二個回圈 ( for j in range(3):) 時,您將附加三倍于呼叫的物件null。
當您運行第三個回圈時,for k in range(3):您每次都在訪問和修改同一個物件。
您可以檢查我的意思是列印物件 id:
for k in range(3):
print(id(identity[k]))
解決方案只是附加object的副本,將第二個回圈更改為:
for j in range(3):
identity.append(null.copy()) # <-- added .copy()
uj5u.com熱心網友回復:
identity = [[int(j == i) for j in range(n_rows)] for i in range(n_rows)]
uj5u.com熱心網友回復:
您可以使用 Numpy 庫輕松創建
import numpy as np
data = np.eye(rows, columns)
[![# Let's do that:
data = np.eye(5,5)
print(data)][1]][1]
希望你明白![1]:https : //i.stack.imgur.com/wmKpe.png
uj5u.com熱心網友回復:
擴展@enke Answer,您可以以模塊化形式進行,創建一個包含任意多行的單位矩陣。
def eye(num):
mat = []
for i in range(num 1):
row = [0]*(num 1)
row[i]=1
mat.append(row)
return mat
現在你可以輕松做到
eye(5)
Out[2]:
[[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1]]
uj5u.com熱心網友回復:
a = int(input('輸入你需要的矩陣個數::'))
lis = []
for i in range(a):
new = [0]*a
new[i] = 1
lis.append(new)
# Now you can add many identity matrix, Enjoy!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407314.html
標籤:
