没有 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]