嗯,我想在没有NumPy的Python中通过向量实现乘法矩阵。因此,以这种格式为例,给出了一个矩阵(2x2):
A = [ [2, 1],
[5, 7] ]
并且以这种格式给定一个向量,例如(2x1):
b = [ [11],
[13] ]
而且我想获得此向量(2x1):
с = [ [35],
[146] ]
我尝试过的事情:
def myzeros(n): # create zero vector
res = []
for i in range(n):
res.append([0])
return res
def mydot(A, B):
res = myzeros(len(B)) # create zero vector of size B
for i in range(len(A)):
res.append( sum(A[i][j]*B[j] for j in range(len(A[0]))) )
return res
以及相应的错误:
res.append( sum(A[i][j]*B[j] for j in range(len(A[0]))) )
TypeError: unsupported operand type(s) for +: 'int' and 'list'
哪里有错?
让我们将向量定义为Python列表,将矩阵定义为列表列表。
b = [11, 13]
A = [ [2, 1],
[5, 7] ]
然后,您可以使用
def mydot(v1, v2):
return sum([x*y for x,y in zip(v1, v2)])
def matmulvec(M, v):
return [mydot(r,v) for r in M]
获取
matmulvec(A, b)
[35, 146]