我的班级已经完成了加法和减法。但是当我尝试进行乘法运算时,我有了不必要的外部数组。
class Matrix:
def __init__(self,*args):
self.m = []
self.m.extend(args)
m1 = Matrix([1,2],[3,4])
有效。但是对于乘法
empty = Matrix([[0 for row in range(col_matrix)] for col in range(row_self)])
我得[[[0, 0], [0, 0]]]
而不是[[0, 0], [0, 0]]
。我该怎么办?
答案 0 :(得分:1)
不因为extend
本身:但是因为您使用*args
(带星号*
)。的确如果你打电话:
Matrix([[0,0],[0,0]])
args
是元组([[0,0],[0,0]],)
(包含一个元素)会发生什么。所以你扩展元组,从而append
元组的单个元素:你 append([[0,0],[0,0]])
。
你可能想要的是逐一扩展 args
的所有元素,所以:
class Matrix:
def __init__(self,*args):
self.m = []
for argi in args:
self.m.extend(argi)
如果您想只接受一个参数,您可以将流程简化为:
class Matrix:
def __init__(self,data): # without asterisk
self.m = []
self.m.extend(data)
或者让它更优雅,例如:
class Matrix:
def __init__(self,data):
self.m = list(data)
请注意,您制作浅色副本:您最好制作深层副本,因为否则行仍然相同,因此对一个矩阵中的行进行修改将反思另一个矩阵。所以:
from copy import deepcopy
class Matrix:
def __init__(self,data):
self.m = deepcopy(data)