class A:
def __init__(self, matrix=[]):
self.matrix = matrix
def dimension(self):
return len(self.matrix), len(self.matrix[0])
def reduce_matrix(self, i, j):
temp = self.matrix[:i-1] + self.matrix[i:]
M = A([row[:j-1] + row[j:] for row in temp])
return M
def determinant(self):
(nrows, ncols) = self.dimension()
if nrows != ncols:
return ("Cannot find determinant of non-square matrix.")
elif nrows == 1:
return self.matrix[0][0]
else:
M = A(sum([ ((-1)**j) * self.matrix[0][j] * self.reduce_matrix(1,
j+1).determinant() for j in range(ncols) ]))
return M
您好,我刚开始OOP所以我有一个问题,关于使用方法的返回值代替“实例名称”,该实例名称作为“self”传递给其他方法。
我包含了其余的代码,它只是计算矩阵问题,但我只关注“self.reduce_matrix(1,j + 1)”。determinant()“它的位”。我需要取一个矩阵(这是[[1,2,3],[4,5,6]]列表的列表),并在矩阵中每列执行“reduce_matrix”方法1次,并且每次,“determinant(self)”方法传递从另一个方法返回的值。当我运行它时,它说“列表对象没有属性”决定因素“”因为我不能像通常那样将“自我”传递给行列式方法 - >“self.determinant(self)”
任何建议将非常感谢
在reduce_matrix
:
M
作为M = A([row[:j-1] + row[j:] for row in temp])
M.matrix
但M
本身。也就是说,numpy适用于各种矩阵运算等等。