【问题标题】:Why different initialization of Python List giving different outputs for matrix multiplication [duplicate]为什么 Python List 的不同初始化会为矩阵乘法提供不同的输出[重复]
【发布时间】:2020-04-04 23:18:18
【问题描述】:

我试图进行矩阵乘法,同时使用快捷方法初始化列表,即 C[[0]*column]*row。 该列表已按我想要的方式初始化,但它给了我错误的答案。 之后我尝试使用 for 循环初始化代码,它给了我正确的答案。 请帮助我了解此 python 列表行为背后的原因。

这是我的代码:

        A = [[1,2],[3,4]]
        B = [[5,6,],[7,8]]
        C = []
        for i in range(2):
            c = []
            for j in range(2):
              c.append(int(0))
            C.append(c)
        D = [[int(0)]*2]*2

        for i in range(len(A)):
          for j in range(len(B[0])):
              for k in range(len(B)):
                  C[i][j] += A[i][k] * B[k][j]
                  D[i][j] += A[i][k] * B[k][j]

        for r in C:
          print(r)
        print(D) 

这是我的输出:

        [[19, 22],[43, 50]]
        [[62, 72], [62, 72]]

【问题讨论】:

标签: python list matrix matrix-multiplication


【解决方案1】:

原因可能是,在执行列表相乘的“快捷方法”时,Python 不会对列表进行深层复制。看这个例子:

d = [ 5 * [2] ] * 3
>> [[2, 2, 2, 2, 2], [2, 2, 2, 2, 2], [2, 2, 2, 2, 2]]

d[0][0] = 1
>> [[1, 2, 2, 2, 2], [1, 2, 2, 2, 2], [1, 2, 2, 2, 2]]

看起来我正要修改元素 [0][0],但实际上其他行只是引用第一行 - 所以我更改了三行而不是一行。

请考虑使用numpy 进行矩阵计算:)

【讨论】:

  • 谢谢。 :) 需要在不使用 Numpy 的情况下解决此问题。
猜你喜欢
  • 2021-10-04
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多