Матричное и векторное умножение без NumPy - PullRequest
0 голосов
/ 14 февраля 2020

Ну, я хочу реализовать матрицу умножения на вектор в Python без NumPy. Итак, приведена матрица для примера (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'

Где ошибка?

1 Ответ

1 голос
/ 14 февраля 2020

Давайте определим векторы как 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]
...