Spec-Zone.ru › NumPy 1.21

numpy.matmul

numpy.matmul(x1, x2, /, out=None, *, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj, axes, axis]) = <ufunc 'matmul'>

Матричное произведение двух массивов.

Параметры
x1, x2array_like

Входные массивы, скаляры запрещены.

outndarray, необязательно

Расположение, в которое сохраняется результат. Если предоставлено, оно должно иметь форму, соответствующую подписи (n,k),(k,m)->(n,m). Если не предоставлено или равно None, возвращается новый массив.

**kwargs

Для других ключевых аргументов см. документацию по ufunc.

В версии 1.16: Теперь обрабатывает ufunc kwargs

Возвращает
yndarray

Матричное произведение входных данных. Это скаляр только тогда, когда x1, x2 являются одномерными векторами.

Возбуждает
ValueError

Если последняя размерность x1 не имеет такого же размера, как предпоследняя размерность x2.

Если передано скалярное значение.

См. также

vdot

Произведение с комплексно сопряжёнными элементами.

tensordot

Произведение сумм по произвольным осям.

einsum

Обозначение Эйнштейна для суммирования.

dot

альтернативное матричное произведение с другими правилами вещания.

Примечания

Поведение зависит от аргументов следующим образом.

  • Если оба аргумента являются 2-мерными, они умножаются как обычные матрицы.
  • Если любой аргумент является N-мерным, N > 2, он обрабатывается как набор матриц, расположенных в последних двух индексах, и вещается соответственно.
  • Если первый аргумент является 1-мерным, он преобразуется в матрицу путём добавления 1 в начало его размерностей. После матричного умножения добавленная 1 удаляется.
  • Если второй аргумент является 1-мерным, он преобразуется в матрицу путём добавления 1 в конец его размерностей. После матричного умножения добавленная 1 удаляется.

matmul отличается от dot двумя важными способами:

  • Умножение на скаляры запрещено, используйте * вместо этого.
  • Наборы матриц вещаются вместе, как если бы матрицы были элементами, соблюдая подпись (n,k),(k,m)->(n,m):

    >>> a = np.ones([9, 5, 7, 4])
    >>> c = np.ones([9, 5, 4, 3])
    >>> np.dot(a, c).shape
    (9, 5, 7, 9, 5, 3)
    >>> np.matmul(a, c).shape
    (9, 5, 7, 3)
    >>> # n is 7, k is 4, m is 3
    

Функция matmul реализует семантику оператора @ , введённого в Python 3.5 в соответствии с PEP 465.

Примеры

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

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

Для 2-мерных, смешанных с 1-мерными, результат обычный.

>>> a = np.array([[1, 0],
...               [0, 1]])
>>> b = np.array([1, 2])
>>> np.matmul(a, b)
array([1, 2])
>>> np.matmul(b, a)
array([1, 2])

Вещание стандартное для наборов массивов

>>> a = np.arange(2 * 2 * 4).reshape((2, 2, 4))
>>> b = np.arange(2 * 2 * 4).reshape((2, 4, 2))
>>> np.matmul(a,b).shape
(2, 2, 2)
>>> np.matmul(a, b)[0, 1, 1]
98
>>> sum(a[0, 1, :] * b[0 , :, 1])
98

Вектор, вектор возвращает скалярное внутреннее произведение, но ни один аргумент не комплексно сопряжён:

>>> np.matmul([2j, 3j], [2j, 3j])
(-13+0j)

Умножение на скаляр вызывает ошибку.

>>> np.matmul([1,2], 3)
Traceback (most recent call last):
...
ValueError: matmul: Input operand 1 does not have enough dimensions ...

Оператор @ может использоваться как сокращение для np.matmul на ndarrays.

>>> x1 = np.array([2j, 3j])
>>> x2 = np.array([2j, 3j])
>>> x1 @ x2
(-13+0j)

В версии 1.10.0.

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.matmul.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API