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,:])
Смотрите так же:
outer, dot, matmul

Примеры

Для одномерных массивов вычисляется обычное скалярное произведение:

>>> 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]]])