python中的向量矩阵乘法?

python中的向量矩阵乘法?,python,vector,matrix,multiplication,Python,Vector,Matrix,Multiplication,所以我想把一个矩阵乘以一个向量。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 = s

所以我想把一个矩阵乘以一个向量。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。

对于纯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中用zip替换itertools.izip。

下面是一种不同的、较短的纯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替换为just zip。

错误出现在sum+=r[i]*v[i]行中。看起来r[i]*v[i]是一个列表,这可能意味着r[i]是一个列表,也就是说m[j][i]是一个列表。你能打印出你正在使用的m的值吗?如果你有很多这样的操作要做,你应该看看numpy。在一个实际的项目中,你将使用它,而不是重新发明轮子。错误在sum+=r[i]*v[i]行。看起来r[i]*v[i]是一个列表,这可能意味着r[i]是一个列表,意思是m[j][i]是一个列表。你能打印出你正在使用的m的值吗?如果你有很多这样的操作要做,你应该看看numpy。在一个真实的项目中,你将使用它,而不是重新发明轮子。谢谢,我已经整理好了。谢谢你的帮助。@Ammar你能至少奖励这个用户并接受他的答案吗?或者只发布你自己的答案而不留下这个问题?谢谢,我已经解决了。谢谢您的帮助。@Ammar您是否至少可以奖励此用户并接受他的答案,或者只发布您自己的答案而不留下此问题?