我正在嘗試使用numpy獲得Python列表/矩陣的「強大」。我唯一的當前工作的解決方案是一個反覆的使用功能np.dot():Numpy 2D數組 - 功率 - 沒有返回答案?
def matr_power(matrix, power):
matrix_a = list(matrix)
matrix_b = list(matrix)
for i in range(0, power-1):
matrix_a = np.dot(matrix_a, matrix_b)
return matrix_a
這工作適合我的需要,但我知道這可能不是最有效的方法。
我已經嘗試將我的列表轉換爲一個numpy數組,然後對其執行電源操作,然後返回列表以便它可用於我需要的形式。轉換似乎發生,但功率計算不會。
while (foo != bar):
matr_x = np.asarray(matr_a)
matr_y = matr_x ** n
matr_out = matr_y.tolist()
n += 1
# Other code here to output certain results
的問題是,該矩陣被轉換爲預期的陣列,但是在執行動力作業時(**
)matr_y
最終被相同matr_x
彷彿是有史以來執行任何計算。我曾嘗試使用np.power(matr_y, n)
和Stack Overflow的相關問題中找到的一些其他解決方案。
我試過使用numpy文檔,但是(或者我誤解了它,或者)它只是確認這應該按預期工作。
當在PyCharm中檢查調試控制檯時,除了計算matr_x ** i
從未被計算(或者從未存儲在matr_y
中)之外,一切看起來都不錯(所有的矩陣/列表/數組都被轉換爲預期的)。
回答
雖然可以使用numpy的矩陣與所述操作者**
,最好的解決方案是使用numpy的陣列(如numpy的矩陣被棄用)聯合numpy的的linalg matrix_power方法。
matr_x = np.array(mat_a)
matr_y = np.linalg.matrix_power(matr_x, path_length)
work_matr = matr_y.tolist()
這也是現在很明顯的**
功能被逐元素可能已經發現前面要不是我一直在使用鄰接矩陣(僅零和的)。
對於numpy的陣列,''** *行爲逐個元件*。 –
好吧,謝謝,但權力(matr_y,我)也似乎沒有按照我的預期行事,這是否也是元素明智?通過np.dot()我唯一的選擇迭代? – Matchoo
是的,'power'也是元素明智的,正如其文檔字符串的第一行所解釋的那樣。 :) –