2015-05-19 588 views
0

我在使用python3製作矩陣乘法算法時遇到了問題。TypeError:'int'object is not subscriptable(python)

這是代碼:

def matrixMult(m1, m2): 
    result = [[0 for x in range(len(m1))] for x in range(len(m2[0]))] 
    # Iterate through rows of m1. 
    for i in range(len(m1)): 
     # Iterate through columns of m2. 
     for j in range(len(m2[0])): 
      # Iterate through rows of m2. 
      for k in range(len(m2)): 
       result[i][j] += m1[i][k] * m2[k][j] # error occurs here. 

    return result 

試圖調用它在兩個隨機矩陣,如下所示:

m = [3, 4, 2] 
n = [[13, 9, 7, 15], [8, 7, 4, 6], [6, 4, 0, 3]] 
r = matrixMult(m, n) 

這導致TypeError: 'int' object is not subscriptable消息。

我爲上面聲明的兩個矩陣添加了一個print(type()),它們是'list'。對於函數原型類'list'中使用的類也是如此。地獄,一切都是類型'list'。我不知道int object是什麼。

回答

2

你是治療m1爲整數的嵌套列表:

result[i][j] += m1[i][k] * m2[k][j] 
#    ^^^^^^^^ 

它不是;它只是一個簡單的整數列表。 m1[i]則是一個整數對象,你不能索引整數:

>>> [3, 4, 2][0] 
3 
>>> [3, 4, 2][0][0] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object has no attribute '__getitem__' 

你可能想只是i使用的指標:

result[i][j] += m1[i] * m2[k][j] 

或只傳遞二維數組(所以通在[[3], [4], [2]]而不是[3, 4, 2])。

+0

好的指數,謝謝你幫助。你會如何建議我處理一維矩陣? – tudorv

+0

@tudorv:好,你怎麼做*一般用一個二維數組乘以一維數組?您可以傳遞一個二維數組,每列只有一列,或者您需要調整您的乘法代碼以使用一維數組。 –

1

您有以下索引操作

m1[i][k] 

m1傳遞作爲

m = [3, 4, 2] 

它只有1種尺寸從,不2.

+0

好的,謝謝你的幫助。你會如何建議我處理一維矩陣? – tudorv