所以我试图将矩阵乘以向量。并且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'和'list'的不支持的操作数类型
我猜测python将向量视为int或列表,并且由于类型不同而不会执行任何基本运算符。有办法解决这个问题吗?不幸的是我无法使用Numpy。
答案 0 :(得分:5)
这是纯粹的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
。)