實作一個函式mat_mult_by_transpose(mat),它得到一個有效矩陣mat并回傳一個新矩陣,它是??????和(??????)??的矩陣乘法,即(??????) ? (??????)??。回傳一個新矩陣,不修改 mat2。您可以假設輸入矩陣不為空。
示例 1:
mat = [[1,2],[3,4],[5,6]]
mult_mat = mat_mult_by_transpose(mat)
print(mat) # [[1, 2], [3, 4], [5, 6]]
print(mult_mat) # [[5, 11, 17], [11, 25, 39], [17, 39, 61]]
示例 2:
mat2 = [[0, 1, 2], [10, 11, 12], [20, 21, 22]]
mult_mat2 = mat_mult_by_transpose(mat2)
print(mult_mat2) # [[5, 35, 65], [35, 365, 695], [65, 695, 1325]]
這是我的嘗試:
def mat_transpose(mat):
transposedMat= []
i = 0
for i in range(len(mat[i])):
newMat= []
for j in range(len(mat)):
newMat.append(mat[j][i])
transposedMat.append(newMat)
return transposedMat
def mat_mult_by_transpose(mat):
matT = mat_transpose(mat)
mat2 = []
for i in range(len(matT)):
temp_list=[]
for j in range(len(matT)):
sum = 0
for k in range(len(matT[0])):
sum = mat[i][k] * matT[k][j]
temp_list.append(sum)
mat2.append(temp_list)
return mat2
我遇到的錯誤是這樣的:
Traceback (most recent call last):
File "file0.py", line 156, in <module>
mult_mat = mat_mult_by_transpose(mat)
File "file0.py", line 97, in mat_mult_by_transpose
sum = mat[i][k] * matT[k][j]
IndexError: list index out of range
我不明白我的錯誤在哪里......
uj5u.com熱心網友回復:
假設你的mat_transpose()作業正常。從維度上看。
讓mat有維度MxN
因此M = len(mat)和N = len(mat[0])
現在matT將具有維度NxM
HenceN = len(matT)和M = len(matT[0])
您需要遍歷第一個矩陣的行mat,即i范圍 [0..M]
然后是第二個矩陣的列matT,即j范圍 [0..M]
并且k應該在 [0..N] 的公共維度范圍內
這是代碼:
def mat_mult_by_transpose(mat):
matT = mat_transpose(mat)
mat2 = []
for i in range(len(mat)): # M,
temp_list=[]
for j in range(len(matT[0])): # M
sum = 0
for k in range(len(mat[0])): # N, you can use len(matT) also
sum = mat[i][k] * matT[k][j]
temp_list.append(sum)
mat2.append(temp_list)
return mat2
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/535775.html
上一篇:如何查找某個字串在整個Excel作業簿的某些列中出現了多少次?
下一篇:在Cypress中迭代陣列
