没有NumPy的矩阵和向量乘法

问题描述 投票:0回答:1

嗯,我想在没有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 vector linear-algebra matrix-multiplication
1个回答
0
投票

让我们将向量定义为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]
© www.soinside.com 2019 - 2024. All rights reserved.