错误:“矩阵”对象不可下标

时间:2019-11-01 13:28:58

标签: python

我已经在python中为矩阵创建了一个类,并希望具有不同的函数,这些函数在应用于矩阵对象时可以实现特定的目标。发生错误的特定函数是将一个矩阵添加到另一个矩阵的函数。

class Matrix:
  def __init__(self, rows):
    self.rows = rows    
    self.m = len(rows) 
    self.n = len(rows[0])


  def add(self,other):
     output = [[0 for x in range(self.m)] for y in range(self.m)]
     for i in range(self.m):
       for j in range(self.n): 
         output[i][j] = self[i][j] + other[i][j]
     returnmatrix = Matrix(output)
     return returnmatrix

B = Matrix([[1,2,3], [4,5,6], [7,8,9]])
F = Matrix([[1,2,3], [4,5,6], [7,8,9]])
B.add(F)

我希望输出是3x3矩阵,它是矩阵B和F的加法。收到的错误是:TypeError:“ Matrix”对象不可下标。

1 个答案:

答案 0 :(得分:1)

错误来自此行;

for j in range(self.n): 
    output[i][j] = self[i][j] + other[i][j]

您正在下标对象,但可能需要下标rows属性:

for j in range(self.n): 
    output.rows[i][j] = self.rows[i][j] + other.rows[i][j]

要使此功能起作用,您需要在此之前创建output作为Matrix的实例,因此完整功能应为:

def add(self,other):
    output = Matrix([[0 for x in range(self.m)] for y in range(self.m)])
    for i in range(self.m):
        for j in range(self.n): 
             output.rows[i][j] = self.rows[i][j] + other.rows[i][j]
    return output

此外,如果要创建类似add的方法,还应该研究dunder方法(例如__add__);这将为您提供很好的功能,使您能够使用加号将对象的实例添加在一起。