Как умножить два вектора и получить матрицу?

В операции numpy у меня есть два вектора, скажем, вектор A равен 4X1, вектор B равен 1X5, если я сделаю AXB, в результате должна получиться матрица размером 4X5.

Но я пробовал много раз, выполняя множество видов изменения формы и транспонирования, все они либо вызывают ошибку, говорящую о том, что не выровнены, либо возвращают одно значение.

Как я должен получить выходной продукт матрицы, которую я хочу?


person Larry    schedule 18.02.2015    source источник


Ответы (3)


Обычное матричное умножение работает до тех пор, пока векторы имеют правильную форму. Помните, что * в Numpy — это поэлементное умножение, а матричное умножение доступно с numpy.dot() (или с оператором @ в Python 3.5).

>>> numpy.dot(numpy.array([[1], [2]]), numpy.array([[3, 4]]))
array([[3, 4],
       [6, 8]])

Это называется «внешний продукт». Вы можете получить его, используя простые векторы, используя numpy.outer():

>>> numpy.outer(numpy.array([1, 2]), numpy.array([3, 4]))
array([[3, 4],
       [6, 8]])
person Dietrich Epp    schedule 18.02.2015

Функция matmul (начиная с numpy 1.10.1) работает отлично:

import numpy as np

a = np.array([[1],[2],[3],[4]])
b = np.array([[1,1,1,1,1],])

ab = np.matmul(a, b)
print (ab)
print(ab.shape)

Вы должны правильно объявить свои векторы. Первый должен быть списком списков одного числа (в этом векторе должны быть столбцы в одной строке), а второй - списком списков (в этом векторе должны быть строки в одном столбце), как в приведенном выше примере.

Вывод:

[[1 1 1 1 1]
 [2 2 2 2 2]
 [3 3 3 3 3]
 [4 4 4 4 4]]

(4, 5)
person Serenity    schedule 09.04.2019

Если вы используете numpy.

Во-первых, убедитесь, что у вас есть два вектора. Например, vec1.shape = (10, ) и vec2.shape = (26, ); в numpy вектор-строка и вектор-столбец - это одно и то же.

Во-вторых, вы делаете res_matrix = vec1.reshape(10, 1) @ vec2.reshape(1, 26) ;.

Наконец, у вас должно быть: res_matrix.shape = (10, 26).

В документации numpy говорится, что np.matrix() будет считаться устаревшим, поэтому лучше его не использовать.

person max yi    schedule 09.04.2019