【问题标题】:Vector Matrix multiplication in python?python中的向量矩阵乘法?
【发布时间】:2012-05-08 18:17:21
【问题描述】:

所以我试图将矩阵乘以向量。并且python不断抛出错误。这是我正在尝试的代码:

def matmult(m, v):
    rows = len(m)
    w = [0]*rows
    irange = range(len(v))
    sum = 0
    for j in range(rows):
        r = m[j]
        for i in irange:
            sum += r[i]*v[i]
    w[j],sum = sum,0
return w

这不是我的,但那是我在生气并删除它之前编码的。错误是:TypeError: unsupported operand type(s) for +: 'int' and 'list'

我猜测 python 将向量视为一个 int 或一个列表,并且由于类型的不同而不会执行任何基本运算符。有什么办法可以解决这个问题?不幸的是我不能使用 Numpy。

【问题讨论】:

  • 错误出现在sum += r[i]*v[i] 行中。
  • 貌似r[i] * v[i]是一个列表,大概意思是r[i]是一个列表,意思是m[j][i]是一个列表。你能打印出你正在使用的m 的值吗?
  • 如果你有很多这样的操作,你应该看看numpy。
  • 在实际项目中,您将使用real libraries 而不是重新发明轮子。

标签: python vector matrix multiplication


【解决方案1】:

对于纯 python 矩阵时间向量乘法,这是一种不同的、更短的方法:

 import operator
 import itertools

 def dot(x, y):
     assert len(x) == len(y)
     return sum(itertools.starmap(operator.mul, itertools.izip(x, y)))

 def matmult(m, v):
     return [dot(row, v) for row in m]

(这是针对 python 2 的——在 python 3 中将 itertools.izip 替换为 zip。)

【讨论】:

  • 谢谢,我真的把它整理出来了。感谢您的帮助。
  • @Ammar 你能至少奖励这个用户并接受他的答案,或者只是发布你自己的答案而不是让这个问题保持打开状态?
猜你喜欢
  • 2020-07-13
  • 1970-01-01
  • 2014-09-22
  • 2020-03-16
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多