Array API specification for linear algebra functions.
A conforming implementation of the array API standard must provide and support the following functions adhering to the following conventions.
- Positional parameters must be positional-only parameters. Positional-only parameters have no externally-usable name. When a function accepting positional-only parameters is called, positional arguments are mapped to these parameters based solely on their order.
- Optional parameters must be keyword-only arguments.
- Broadcasting semantics must follow the semantics defined in {ref}
broadcasting
. - Unless stated otherwise, functions must support the data types defined in {ref}
data-types
. - Unless stated otherwise, functions must adhere to the type promotion rules defined in {ref}
type-promotion
. - Unless stated otherwise, floating-point operations must adhere to IEEE 754-2019.
(function-matmul)=
Computes the matrix product.
The `matmul` function must implement the same semantics as the built-in `@` operator (see [PEP 465](https://www.python.org/dev/peps/pep-0465)).
-
x1: <array>
- first input array. Should have a numeric data type. Must have at least one dimension. If
x1
is one-dimensional having shape(M)
andx2
has more than one dimension,x1
must be promoted to a two-dimensional array by prepending1
to its dimensions (i.e., must have shape(1, M)
). After matrix multiplication, the prepended dimensions in the returned array must be removed. Ifx1
has more than one dimension (including after vector-to-matrix promotion),x1
must be compatible withx2
(see {ref}broadcasting
). Ifx1
has shape(..., M, K)
, the innermost two dimensions form matrices on which to perform matrix multiplication.
- first input array. Should have a numeric data type. Must have at least one dimension. If
-
x2: <array>
- second input array. Should have a numeric data type. Must have at least one dimension. If
x2
is one-dimensional having shape(N)
andx1
has more than one dimension,x2
must be promoted to a two-dimensional array by appending1
to its dimensions (i.e., must have shape(N, 1)
). After matrix multiplication, the appended dimensions in the returned array must be removed. Ifx2
has more than one dimension (including after vector-to-matrix promotion),x2
must be compatible withx1
(see {ref}broadcasting
). Ifx2
has shape(..., K, N)
, the innermost two dimensions form matrices on which to perform matrix multiplication.
- second input array. Should have a numeric data type. Must have at least one dimension. If
-
out: <array>
- if both
x1
andx2
are one-dimensional arrays having shape(N)
, a zero-dimensional array containing the inner product as its only element. - if
x1
is a two-dimensional array having shape(M, K)
andx2
is a two-dimensional array having shape(K, N)
, a two-dimensional array containing the conventional matrix product and having shape(M, N)
. - if
x1
is a one-dimensional array having shape(K)
andx2
is an array having shape(..., K, N)
, an array having shape(..., N)
(i.e., prepended dimensions during vector-to-matrix promotion must be removed) and containing the conventional matrix product. - if
x1
is an array having shape(..., M, K)
andx2
is a one-dimensional array having shape(K)
, an array having shape(..., M)
(i.e., appended dimensions during vector-to-matrix promotion must be removed) and containing the conventional matrix product. - if
x1
is a two-dimensional array having shape(M, K)
andx2
is an array having shape(..., K, N)
, an array having shape(..., M, N)
and containing the conventional matrix product for each stacked matrix. - if
x1
is an array having shape(..., M, K)
andx2
is a two-dimensional array having shape(K, N)
, an array having shape(..., M, N)
and containing the conventional matrix product for each stacked matrix. - if either
x1
orx2
has more than two dimensions, an array having a shape determined by {ref}broadcasting
x1
againstx2
and containing the conventional matrix product for each stacked matrix.
The returned array must have a data type determined by {ref}
type-promotion
. - if both
- if either
x1
orx2
is a zero-dimensional array. - if
x1
is a one-dimensional array having shape(N)
,x2
is a one-dimensional array having shape(M)
, andN != M
. - if
x1
is an array having shape(..., M, K)
,x2
is an array having shape(..., L, N)
, andK != L
.
(function-matrix-transpose)=
Transposes a matrix (or a stack of matrices) x
.
-
x: <array>
- input array having shape
(..., M, N)
and whose innermost two dimensions formMxN
matrices.
- input array having shape
-
out: <array>
- an array containing the transpose for each matrix and having shape
(..., N, M)
. The returned array must have the same data type asx
.
- an array containing the transpose for each matrix and having shape
(function-tensordot)=
Returns a tensor contraction of x1
and x2
over specific axes.
-
x1: <array>
- first input array. Should have a numeric data type.
-
x2: <array>
- second input array. Must be compatible with
x1
(see {ref}broadcasting
). Should have a numeric data type.
- second input array. Must be compatible with
-
axes: Union[ int, Tuple[ Sequence[ int ], Sequence[ int ] ] ]
-
number of axes (dimensions) to contract or explicit sequences of axes (dimensions) for
x1
andx2
, respectively.If
axes
is anint
equal toN
, then contraction must be performed over the lastN
axes ofx1
and the firstN
axes ofx2
in order. The size of each corresponding axis (dimension) must match. Must be nonnegative.- If
N
equals0
, the result is the tensor (outer) product. - If
N
equals1
, the result is the tensor dot product. - If
N
equals2
, the result is the tensor double contraction (default).
If
axes
is a tuple of two sequences(x1_axes, x2_axes)
, the first sequence must apply tox
and the second sequence tox2
. Both sequences must have the same length. Each axis (dimension)x1_axes[i]
forx1
must have the same size as the respective axis (dimension)x2_axes[i]
forx2
. Each sequence must consist of unique (nonnegative) integers that specify valid axes for each respective array. - If
-
-
out: <array>
- an array containing the tensor contraction whose shape consists of the non-contracted axes (dimensions) of the first array
x1
, followed by the non-contracted axes (dimensions) of the second arrayx2
. The returned array must have a data type determined by {ref}type-promotion
.
- an array containing the tensor contraction whose shape consists of the non-contracted axes (dimensions) of the first array
(function-vecdot)=
Computes the (vector) dot product of two arrays.
-
x1: <array>
- first input array. Should have a numeric data type.
-
x2: <array>
- second input array. Must be compatible with
x1
(see {ref}broadcasting
). Should have a numeric data type.
- second input array. Must be compatible with
-
axis: Optional[ int ]
- axis over which to compute the dot product. Must be an integer on the interval
[-N, N)
, whereN
is the rank (number of dimensions) of the shape determined according to {ref}broadcasting
. If specified as a negative integer, the function must determine the axis along which to compute the dot product by counting backward from the last dimension (where-1
refers to the last dimension). IfNone
, the function must compute the dot product over the last axis. Default:None
.
- axis over which to compute the dot product. Must be an integer on the interval
-
out: <array>
- if
x1
andx2
are both one-dimensional arrays, a zero-dimensional containing the dot product; otherwise, a non-zero-dimensional array containing the dot products and having rankN-1
, whereN
is the rank (number of dimensions) of the shape determined according to {ref}broadcasting
. The returned array must have a data type determined by {ref}type-promotion
.
- if
- if provided an invalid
axis
. - if the size of the axis over which to compute the dot product is not the same for both
x1
andx2
.