如何解决Python 将 2 个向量的元素乘积为矩阵
我尝试对 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,5.0]] 虽然我想获得: C=[[1.5,2.0,2.5],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,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)
使用调试器可以快速轻松地找到这些错误。建议您尝试使用调试器查看每次迭代中的值如何变化
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。