numpy.matmul

numpy.matmul(a, b, out=None)

Функция matmul() вычисляет матричное произведение двух массивов. Доступна в NumPy с версии 1.10.0.

Поведение функции зависит от входных массивов следующим образом:

  • Если оба аргумента это двумерные массивы, то они умножаются как обычные матрицы;
  • Если один из массивов имеет размерность больше двух, то он считается последовательностью матриц с формой, равной последним двум индексам. Далее срабатывает механизм транслирования;
  • Если первый аргумент это одномерный массив (вектор), то он считается матрицей в которой каждая строка повторяется и равна исходному вектору. После умножения возвращается одна строка результирующей матрицы;
  • Если второй аргумент это одномерный массив, то он считается матрицей в которой каждый столбец повторяется и равен исходному вектору. После умножения возвращается один столбец результирующей матрицы;
  • Произведение последовательности матриц на вектор и наоборот, вернет последовательность векторов;
  • Аргументом не может быть число, для этого используйте a*b.
Параметры:
a, b - массивы NumPy или подобные массивам объекты.
Входные данные.
out - массив NumPy, необязательный параметр.
Массив в который можно поместить результат функции. Данный массив должен соответствовать форме и типу данных результирующего массива функции, а так же обязательно быть C-смежным, т.е. хранить данные в строчном С стиле. Указание данного параметра, позволяет избежать лишней операции присваивания тем самым немного ускоряя работу вашего кода. Полезный параметр если вы очень часто обращаетесь к функции в цикле.
Возвращает:
результат - массив NumPy или число
Если оба аргумента это векторы то возвращается число. В противном случае возвращается массив.

Замечание

Если один из аргументов это число, или если длина последней оси a не равна длине всех осей кроме первой массива b, то возникает исключение ValueError.

Смотрите так же:
dot, vdot, tensordot, einsum


Примеры

Умножение двумерных массивов:

>>> a = [[1, 2], [3, 4]]
>>> b = [[2, 4], [1, 3]]
>>> 
>>> np.matmul(a, b)
array([[ 4, 10],
       [10, 24]])

Умножение одномерного массива на двумерный:

>>> c = [5, 7]
>>> 
>>> np.matmul(c, a)
array([26, 38])
>>> 
>>> np.matmul(a, c)
array([19, 43])

Массивы с размерностью больше двух считаются последовательностью матриц:

>>> d = np.arange(12).reshape(3, 2, 2)
>>> d
array([[[ 0,  1],
        [ 2,  3]],

       [[ 4,  5],
        [ 6,  7]],

       [[ 8,  9],
        [10, 11]]])
>>> 
>>> np.matmul(a, d)
array([[[ 4,  7],
        [ 8, 15]],

       [[16, 19],
        [36, 43]],

       [[28, 31],
        [64, 71]]])
>>> 
>>> np.matmul(a, d[0])
array([[ 4,  7],
       [ 8, 15]])

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

>>> np.matmul([1+2j, 1+3j], [1+2j, 1+3j])
(-11+10j)
>>>
>>> np.inner([1+2j, 1+3j], [1+2j, 1+3j])
(-11+10j)