mindspore.ops.Einsum
- class mindspore.ops.Einsum(equation)[source]
Sums the product of the elements of the input Tensor along dimensions specified notation based on the Einstein summation convention(Einsum). You can use this operator to perform diagonal/reducesum/transpose/matmul/mul/inner product operations, etc.
- Parameters
equation (str) – An attribute, represent the operation you want to do. the value can contain only letters([a-z][A-Z]), commas(,), ellipsis(…), and arrow(->). the letters represent inputs’s tensor dimension, commas(,)represent separate tensors, ellipsis(…) indicates the tensor dimension that you do not care about, the left of the arrow(->) indicates the input tensors, and the right of it indicates the desired output dimension.
- Inputs:
x () - Input tensor used for calculation. The inputs must be a tuple/list of Tensors. When the inputs are only one tensor, you can input (tensor, ). Dtypes of them should be float16/float32/float64 and dtype of the tensor(s) must be the same.
- Outputs:
Tensor, the shape of it can be obtained from the equation, and the data type is the same as input tensors.
- Raises
- Supported Platforms:
GPU
Examples
>>> import mindspore >>> import numpy as np >>> from mindspore import Tensor, ops >>> x = Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32) >>> equation = "i->" >>> einsum = ops.Einsum(equation) >>> output = einsum([x]) >>> print(output) [7.] >>> >>> x = Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32) >>> y = Tensor(np.array([2.0, 4.0, 3.0]), mindspore.float32) >>> equation = "i,i->i" >>> einsum = ops.Einsum(equation) >>> output = einsum((x, y)) >>> print(output) [ 2. 8. 12.] >>> >>> x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32) >>> y = Tensor(np.array([[2.0, 3.0], [1.0, 2.0], [4.0, 5.0]]), mindspore.float32) >>> equation = "ij,jk->ik" >>> einsum = ops.Einsum(equation) >>> output = einsum((x, y)) >>> print(output) [[16. 22.] [37. 52.]] >>> >>> x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32) >>> equation = "ij->ji" >>> einsum = ops.Einsum(equation) >>> output = einsum((x,)) >>> print(output) [[1. 4.] [2. 5.] [3. 6.]] >>> >>> x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32) >>> equation = "ij->j" >>> einsum = ops.Einsum(equation) >>> output = einsum((x,)) >>> print(output) [5. 7. 9.] >>> >>> x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32) >>> equation = "...->" >>> einsum = ops.Einsum(equation) >>> output = einsum((x,)) >>> print(output) [21.] >>> >>> x = Tensor(np.array([1.0, 2.0, 3.0]), mindspore.float32) >>> y = Tensor(np.array([2.0, 4.0, 1.0]), mindspore.float32) >>> equation = "j,i->ji" >>> einsum = ops.Einsum(equation) >>> output = einsum((x, y)) >>> print(output) [[ 2. 4. 1.] [ 4. 8. 2.] [ 6. 12. 3.]]