[英]__add__ matrices method in python 2.7
我是Python的新手,所以我需要你的幫助。 程序必須添加和減去隨機矩陣。
import random
class Matrix:
def __init__(self):
self.mat = [[]]
def gen_ran_numb(self,row=5,col=5):
self.mat=[[random.randint(0,10) for z in xrange(col)] for z in xrange(row)]
def print_matrix(self):
print self.mat
def __add__(self,b):
mat=[]
for j in range(len(self.mat)):
temp=[]
for k in range(len(self.mat[0])):
x=self.mat[j][k] + b.mat[j][k]
temp.append(x)
mat.append(temp)
rez=mat
return rez
def __sub__(self,b):
mat=[]
for j in range(len(self.mat)):
temp=[]
for k in range(len(self.mat)):
x=self.mat[j][k] - b.mat[j][k]
temp.append(x)
mat.append(temp)
return mat
a=Matrix()
b=Matrix()
c=Matrix()
a.print_matrix()
a.gen_ran_numb(5,5)
b.gen_ran_numb(5,5)
c.gen_ran_numb(5,5)
a.print_matrix()
b.print_matrix()
c.print_matrix()
print b+a
print b+a+c
如果我添加2個矩陣,它工作得很好,但如果我添加3或4個矩陣,我會犯這個錯誤:
Traceback (most recent call last):
File "C:/Users/Вадик/Documents/Python/task.py", line 40, in <module>
print b+a+c
TypeError: can only concatenate list (not "instance") to list
我不明白我做錯了什么。 請幫我。 謝謝!
問題是你沒有返回Matrix
對象而是返回實際矩陣,即列表列表。 因此,當您連接2個對象時,它是可以的,但是當您使用3個對象時,您實際上是在嘗試將列表對象與Matrix
對象連接起來。
換句話說,只需更改函數以返回新實例,如下所示:
def __add__(self, b):
res = Matrix()
res.mat = [] #to avoid an unwanted empty list at the beginning of new matrix
for j in range(len(self.mat)):
temp = []
for k in range(len(self.mat[j])):
x = self.mat[j][k] + b.mat[j][k]
temp.append(x)
res.mat.append(temp)
return res
您可能也希望同樣更改__sub__
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.