Python 将 2 个向量的元素乘积到矩阵中

Python product of the elements of 2 vectors into a matrix

我尝试计算 2 个不同向量的元素的乘积并将结果存储在矩阵中,但我在矩阵的每一行中获得相同的值。 这是我的代码:

r=2    
a = [1,2]
b = [3,4,5]
rows, cols = (len(a),len(b))
C = [[0]*cols]*rows
print(C)
for i in range(len(a)):
  for j in range(len(b)):
    x=a[i]*b[j]/r
    C[i][j]=x 
print(C)

我得到: C=[[3.0, 4.0, 5.0], [3.0, 4.0, 5.0]] 虽然我想获得: C=[[1.5, 2.0, 2.5], [3.0, 4.0, 5.0]]

我不明白为什么我的矩阵的两行在 i 的每次迭代中都得到满足。

预先感谢您的回答, 马丁

问题是 C = [[0]*cols]*rows 引用内存中的同一个对象 rows 次。因此,每当您更改一行时,您都在引用所有这些行。有多种方法可以在避免此问题的同时初始化矩阵,例如:C = [[0]*cols for _ in range(rows)].

之前已经讨论过这个问题,例如参见here.

可能与你无关,这取决于这是否是一个练习,但实际上你会在 numpy 中使用矩阵乘法来执行这些类型的任务:

import numpy as np

a = np.array([[1,2]])
b = np.array([[3,4,5]])

a.T * b / 2

out: array([[1.5, 2. , 2.5],
            [3. , 4. , 5. ]])

问题是正在创建的列表是内部相互指向的指针。对一个进行更改也会对另一个进行更改。

您需要使用复制方法或者您可以像这样用不同的方法创建列表

r = 2
a = [1, 2]
b = [3, 4, 5]
rows, cols = (len(a), len(b))
C = [[0 for y in range(cols)] for x in range(rows)]
print(C)
for i in range(rows):
    for j in range(cols):
        x = a[i] * b[j] / r
        C[i][j] = x
print(C)

使用调试器查找这些错误既快速又容易。建议您尝试使用调试器查看每次迭代中值的变化情况