Функция inner
Функция inner возвращает скалярное произведение двух массивов NumPy. Для одномерных массивов она вычисляет сумму произведений соответствующих элементов, аналогично функции dot. Для многомерных массивов функция работает как сумма произведений по последним осям, при этом остальные оси обрабатываются как внешние размерности.
Основное отличие от dot заключается в том, что inner всегда сворачивает последние оси обоих массивов, в то время как dot сворачивает последнюю ось первого массива с предпоследней осью второго.
Синтаксис
np.inner(a, b)
Параметры функции:
a и b - входные массивы. Они должны иметь совместимые формы для операции скалярного произведения по последним осям. Если массивы являются скалярами, функция вернёт их произведение.
Пример
Рассмотрим базовое использование функции inner для одномерных массивов:
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([2, 3, 4, 5, 6])
res = np.inner(arr1, arr2)
print(res)
Результат выполнения кода:
70
Расчёт: 1*2 + 2*3 + 3*4 + 4*5 + 5*6 = 2 + 6 + 12 + 20 + 30 = 70.
Пример
Применим inner к двумерным массивам. В этом случае функция сворачивает последние оси, а результат имеет размерность, равную произведению размерностей остальных осей:
import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
res = np.inner(arr1, arr2)
print(res)
Результат выполнения кода:
[[ 50 68]
[122 167]]
Первая строка результата (50, 68) - это скалярные произведения первой строки массива arr1 с каждой строкой массива arr2. Вторая строка - аналогично для второй строки arr1.
Пример
Покажем разницу между функциями inner и dot на примере двумерных массивов:
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
inner_res = np.inner(arr1, arr2)
dot_res = np.dot(arr1, arr2)
print("inner:")
print(inner_res)
print("dot:")
print(dot_res)
Результат выполнения кода:
inner:
[[17 23]
[39 53]]
dot:
[[19 22]
[43 50]]
Функция inner сворачивает последние оси (вторую ось каждого массива), поэтому результат имеет размерность 2x2. Функция dot сворачивает последнюю ось первого массива со второй осью второго, что соответствует стандартному матричному умножению.
Пример
Используем inner с трёхмерными массивами. В этом случае сворачиваются последние оси, а первые две оси образуют сетку результатов:
import numpy as np
arr1 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
arr2 = np.array([[[1, 0], [0, 1]], [[0, 1], [1, 0]]])
res = np.inner(arr1, arr2)
print(res.shape)
print(res)
Результат выполнения кода:
(2, 2, 2, 2)
[[[[1 2]
[2 1]]
[[3 4]
[4 3]]]
[[[5 6]
[6 5]]
[[7 8]
[8 7]]]]
Результирующий массив имеет размерность (2, 2, 2, 2), где каждая комбинация двухмерных элементов из arr1 и arr2 образует скалярное произведение по последним осям (осям размерности 2).
Пример
Функция inner работает и со скалярными значениями:
import numpy as np
res = np.inner(5, 3)
print(res)
Результат выполнения кода:
15
Для скаляров функция возвращает их произведение.
Пример
Применим inner к массивам с комплексными числами:
import numpy as np
arr1 = np.array([1 + 2j, 3 + 4j])
arr2 = np.array([5 + 6j, 7 + 8j])
res = np.inner(arr1, arr2)
print(res)
Результат выполнения кода:
(70-8j)
Для комплексных чисел функция использует сопряжение первого аргумента: (1-2j)*(5+6j) + (3-4j)*(7+8j) = 70-8j.
Смотрите также
-
функцию
dot,
которая вычисляет скалярное произведение для векторов и матричное умножение для двумерных массивов -
функцию
vdot,
которая вычисляет скалярное произведение с сопряжением первого аргумента для комплексных чисел -
функцию
outer,
которая вычисляет внешнее произведение двух векторов -
функцию
matmul,
которая выполняет матричное умножение для двумерных массивов