没有 NumPy 的矩阵和向量乘法
Matrix and Vector multiplication without NumPy
好吧,我想在没有 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]
好吧,我想在没有 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]