numpy.inner
numpy.inner(a, b)
Функция inner() внутреннее произведение, т.е. для одномерных массивов это, по сути, для многомерных массивов - это сумма произведений по последним осям.
-
- a, b - числа, массивы NumPy или подобные массивам объекты.
- Входные данные.
-
- результат - массив NumPy или число
- Массив с формой
a.shape[:-1] + b.shape[:-1]
. Если оба аргумента - это числа, то возвращает число.
Замечание
Для двумерных и многомерных массивов данная функция эквивалентна команде np.tensordot(a, b, axes=(-1,-1))
.
Если количество осей a равно n, а количество осей массива b равно m, то для внутреннего произведения можно записать общее правило:
np.inner(a, b)[i0,...,in-1,j0,...,jm-1]
= sum(a[i0,...,in-1,:]*b[j0,...,jm-1,:])
Примеры
Для одномерных массивов вычисляется обычное скалярное произведение:
>>> import numpy as np
>>>
>>> np.inner([1, 2], [4, 5])
14
>>> np.dot([1, 2], [4, 5])
14
Внутреннее произведение одномерных и многомерных массивов отличается от скалярного если одномерный массив является первым аргументом:
>>> np.inner([1, 2],[[4,5], [6, 7]])
array([14, 20])
>>> np.inner([[4,5], [6, 7]], [1, 2])
array([14, 20])
>>>
>>> np.dot([1, 2],[[4, 5], [6, 7]])
array([16, 19])
>>>
>>> np.dot([[4,5], [6, 7]], [1, 2])
array([14, 20])
Суммирование произведение происходит по последней оси:
>>> A = np.arange(12).reshape(2, 2, 3)
>>> A
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])
>>> B = np.arange(6).reshape(2, 3)
>>>
>>> np.inner(A, B)
array([[[ 5, 14],
[ 14, 50]],
[[ 23, 86],
[ 32, 122]]])