你的代码有一些问题。。。首先是加法算法的基本逻辑data.append([self.data[k] + other.data[k]])

这个说法很可疑。。。数据是一个二维矩阵,但是在这里你可以用一个索引来访问它。data[k]因此是一整行,使用+可以连接行(可能不是您想要的,对吗?)。可能highBandWidth的解决方案正是您所寻找的。在

第二个问题更微妙,是关于陈述

^{pr2}$

这可能是一个问题,因为Python使用所谓的“引用语义”。矩阵将对内容使用传递的data参数,但不复制它。它将存储对传递给构造函数的data列表对象的引用。

也许这是故意的,但也可能不是。。。这还不清楚。如果你用相同的数据建立两个矩阵,然后改变第一个元素的内容,第二个元素的内容也会改变,这对你来说行吗?如果不是这样,那么您应该复制data的元素,而不是仅仅分配data成员,例如使用self.data = [row[:] for row in data]

或者使用standard copy module中的copy.deepcopy。在

第三个问题是只使用两个空格进行缩进。这不明智。。。在python中工作时,应该使用4个空格缩进,而不要使用硬制表符。请注意,我说过这样做(使用两个空格)是不明智的,并不是说你不聪明,所以请不要把这件事当真(我甚至在开始使用python时也犯了同样愚蠢的错误)。如果你真的想与众不同,那就用python编写令人惊叹的无缺陷软件,而不是仅仅使用错误的缩进或为函数或变量选择错误的名称。关注更高层次的美。在

最后一个问题是(一旦你真正理解了为什么你的代码不起作用),你应该真正地阅读python列表理解,如果使用得当,这个工具可以大大简化代码。例如,添加代码可以变成return Matrix([[a + b for a, b in zip(my_row, other_row)]

for my_row, other_row in zip(self.data, other.data)])

对于一个训练有素的人来说,这比你原来的代码更容易阅读(而且速度也更快)。在