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

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

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

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

Ответ 1

Нормальное умножение матрицы работает до тех пор, пока векторы имеют правильную форму. Помните, что * в 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]])

Ответ 2

если вы используете 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(), поэтому лучше ее не использовать.

Ответ 3

matmul функция matmul v. 1.16 отлично работает:

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)