Numpy внутреннее произведение двух векторов столбцов

Как я могу взять внутреннее произведение двух векторов столбцов в Python numpy

Код ниже не работает

import numpy as np
x = np.array([[1], [2]])
np.inner(x, x)

Вернулся

array([[1, 2],
       [2, 4]])`

вместо 5

3 ответа

Решение

Внутренним произведением вектора с размерами 2x1 (2 строки, 1 столбец) с другим вектором с размером 2x1 (2 строки, 1 столбец) является матрица с размерами 2x2 (2 строки, 2 столбца). Когда вы берете внутреннее произведение любого тензора, внутреннее большинство измерений должно совпадать (в данном случае это 1), и в результате получается тензор с размерами, соответствующими внешнему, т.е. 2x1 * 1x2 = 2x2.

То, что вы хотите сделать, это транспонировать оба так, чтобы при умножении размеры были 1x2 * 2x1 = 1x1.

В общем, умножение чего-либо с размерами NxM чем-то с размерамиMxK, дает что-то с размерами NxK, Обратите внимание, что внутренние размеры должны быть M, Для получения дополнительной информации просмотрите правила умножения матриц

np.inner Функция автоматически транспонирует второй аргумент, поэтому, когда вы передадите два 2x1, вы получите 2x2, но если вы передадите два 1x2, вы получите 1x1.

Попробуй это:

import numpy as np
x = np.array([[1], [2]])
np.inner(np.transpose(x), np.transpose(x))

или просто сначала определите ваш x как вектор строки.

import numpy as np
x = np.array([1,2])
np.inner(x, x)

Попробуйте следующее, это будет работать

np.dot(np.transpose(a),a))

Я думаю, что вы хотите иметь:

x= np.array([1,2])

чтобы получить 5 в качестве вывода, ваш вектор должен быть 1xN, а не Nx1, если вы хотите применить к нему np.inner

Убедитесь , что col_vector имеет форму (N,1), где N - количество элементов

затем просто суммируйте результат умножения один к одному

np.sum(col_vector*col_vector)

Другие вопросы по тегам