Как умножить два вектора и получить матрицу?
В операции 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)