dpnp.linalg.matmul

dpnp.linalg.matmul(x1, x2, /)[source]

Computes the matrix product.

This function is Array API compatible, contrary to dpnp.matmul.

For full documentation refer to numpy.linalg.matmul.

Parameters:
x1{dpnp.ndarray, usm_ndarray}

First input array.

x2{dpnp.ndarray, usm_ndarray}

Second input array.

Returns:
outdpnp.ndarray

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

See also

dpnp.matmul

Similar function with support for more keyword arguments.

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.linalg.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.linalg.matmul(a, b)
array([1, 2])
>>> np.linalg.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.linalg.matmul(a, b).shape
(2, 2, 2)
>>> np.linalg.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.linalg.matmul(x1, x2)
array(-13+0j)