矩阵产生2个不同的答案

时间:2017-07-15 22:12:31

标签: python multidimensional-array

当我开始学习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]]

2 个答案:

答案 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

我认为你的乘法例程也是错误的,但我不确定。如果只设置一个坐标,为什么要在结果中使用矩阵?