当我开始学习python时,我偶然发现了一个简单的问题。我觉得这个输出很特别。我想制作一个2D计算器,但是我的' matrixcreator'函数显然产生了一个不同于我想象的矩阵。为什么不是' matrixmultiplicator'相同?感谢
def matrixmultiplicator(matrix, vector1, vector2,):
for x in range(len(vector1)):
for y in range(len(vector2)):
matrix[0][0]=vector1[x]*vector2[y]
return matrix
def matrixcreator(x,y):
matrix=[]
list=[]
#create first dimension
for a in range(x):
matrix.insert(a,0)
#Create the second dimension
for b in range(y):
list.append(0)
for a in range(x):
matrix[a]=list
return matrix
if __name__ == '__main__':
a=[2,4]
b=[2,4]
matrix=[[0,0],[0,0]]
print(matrix)
print(matrixmultiplicator(matrix,a,b))
matrix=matrixcreator(2,2)
print(matrix)
print(matrixmultiplicator(matrix,a,b))
pycharm(我使用的)中的输出是:
[[0,0],[0,0]]
[[16,0],[0,0]]
[[0,0],[0,0]]
[[16,0],[16,0]]
答案 0 :(得分:1)
在matrix=[[0,0],[0,0]]
中,您使用两个不同的列表来表示第二个维度。但是,在矩阵创建器中,您引用使用list=[]
分配的相同列表对象。
编辑:这可以在
中看到for a in range(x):
matrix[a]=list
将相同的列表对象分配给矩阵中的多个位置。
除此之外,我不太确定你打算用你的代码做什么。循环感觉不合适。首先,在matrix
中插入x零。随后将零添加到列表中,对于该步骤的每次迭代,使用相同的列表对象覆盖矩阵的每个索引。
编辑2:假设您要创建一个包含x行和y列的矩阵,您可以将代码简化为:
def matrixcreator(x,y):
return [[0] * y for _ in range(x)]
创建一个列表推导,由x个不同的列表组成,用y填充。
答案 1 :(得分:0)
这是你应该如何创建矩阵。您需要为每个索引创建一个新列表,之前您正在执行一些不必要的步骤。
def matrixcreator(x,y):
matrix=[]
#create first dimension
for a in range(x):
list=[]
for b in range(y):
list.append(0)
matrix.insert(a,list)
return matrix
我认为你的乘法例程也是错误的,但我不确定。如果只设置一个坐标,为什么要在结果中使用矩阵?