python中的向量矩阵乘法?
所以我想把一个矩阵乘以一个向量。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
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您是否至少可以奖励此用户并接受他的答案,或者只发布您自己的答案而不留下此问题?