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:

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

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)