微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。