1

所以我试图将一个矩阵乘以一个向量。并且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: +: 'int' and 'list' 不支持的操作数类型

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

4

1 回答 1

8

这是纯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 -itertools.izipzip在 python 3 中替换。)

于 2012-05-08T18:25:19.313 回答