dpnp.matmul

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

Matrix product of two arrays.

For full documentation refer to numpy.matmul.

Parameters:
  • x1 ({dpnp.ndarray, usm_ndarray}) -- First input array.

  • x2 ({dpnp.ndarray, usm_ndarray}) -- Second input array.

  • out ({None, dpnp.ndarray, usm_ndarray}, optional) -- Alternative output array in which to place the result. It must have a shape that matches the signature (n,k),(k,m)->(n,m) but the type (of the calculated values) will be cast if necessary. Default: None.

  • dtype ({None, dtype}, optional) -- Type to use in computing the matrix product. By default, the returned array will have data type that is determined by considering Promotion Type Rule and device capabilities.

  • casting ({"no", "equiv", "safe", "same_kind", "unsafe"}, optional) -- Controls what kind of data casting may occur. Default: "same_kind".

  • order ({"C", "F", "A", "K", None}, optional) -- Memory layout of the newly output array, if parameter out is None. Default: "K".

  • axes ({list of tuples}, optional) -- A list of tuples with indices of axes the matrix product should operate on. For instance, for the signature of (i,j),(j,k)->(i,k), the base elements are 2d matrices and these are taken to be stored in the two last axes of each argument. The corresponding axes keyword would be [(-2, -1), (-2, -1), (-2, -1)]. Default: None.

Returns:

out -- Returns the matrix product of the inputs. This is a 0-d array only when both x1, x2 are 1-d vectors.

Return type:

dpnp.ndarray

Limitations

Keyword arguments subok, signature, extobj, and axis are only supported with their default value. Otherwise NotImplementedError exception will be raised.

See also

dpnp.linalg.matmul

Array API compatible version.

dpnp.vdot

Complex-conjugating dot product.

dpnp.tensordot

Sum products over arbitrary axes.

dpnp.einsum

Einstein summation convention.

dpnp.dot

Alternative matrix product with different broadcasting rules.

Examples

For 2-D arrays it is the matrix product:

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

For 2-D mixed with 1-D, the result is the usual.

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

Broadcasting is conventional for stacks of arrays

>>> 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]
array(98)
>>> np.sum(a[0, 1, :] * b[0 , :, 1])
array(98)

Vector, vector returns the scalar inner product, but neither argument is complex-conjugated:

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

The @ operator can be used as a shorthand for matmul on dpnp.ndarray.

>>> x1 @ x2
array(-13+0j)