mindspore.ops.einsum
- mindspore.ops.einsum(equation, *operands)[源代码]
基于爱因斯坦求和约定(Einsum)符号,沿指定维度计算输入tensor元素的乘积之和。
说明
现在支持子列表模式。例如,ops.einsum(op1, sublist1, op2, sublist2, …, sublist_out)。在子列表模式中, equation 由子列表推导得到,Python的省略号和介于[0, 52)的整数list组成子列表。每个操作数后面都有一个子列表,并且最后有一个表示输出的子列表。
equation 只能包含字母、逗号、省略号和箭头。字母表示输入tensor维数,逗号表示单独的tensor,省略号表示忽略的tensor维数,箭头的左边表示输入tensor,右边表示期望输出的维度。
- 参数:
equation (str) - 基于爱因斯坦求和约定的符号。
operands (Tensor) - 输入tensor。
- 返回:
Tensor
- 支持平台:
GPU
样例:
>>> import mindspore >>> import numpy as np >>> x = mindspore.tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32) >>> equation = "i->" >>> output = mindspore.ops.einsum(equation, x) >>> print(output) [7.] >>> x = mindspore.tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32) >>> y = mindspore.tensor(np.array([2.0, 4.0, 3.0]), mindspore.float32) >>> equation = "i,i->i" >>> output = mindspore.ops.einsum(equation, x, y) >>> print(output) [ 2. 8. 12.] >>> x = mindspore.tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32) >>> y = mindspore.tensor(np.array([[2.0, 3.0], [1.0, 2.0], [4.0, 5.0]]), mindspore.float32) >>> equation = "ij,jk->ik" >>> output = mindspore.ops.einsum(equation, x, y) >>> print(output) [[16. 22.] [37. 52.]] >>> x = mindspore.tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32) >>> equation = "ij->ji" >>> output = mindspore.ops.einsum(equation, x) >>> print(output) [[1. 4.] [2. 5.] [3. 6.]] >>> x = mindspore.tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32) >>> equation = "ij->j" >>> output = mindspore.ops.einsum(equation, x) >>> print(output) [5. 7. 9.] >>> x = mindspore.tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32) >>> equation = "...->" >>> output = mindspore.ops.einsum(equation, x) >>> print(output) [21.] >>> x = mindspore.tensor(np.array([1.0, 2.0, 3.0]), mindspore.float32) >>> y = mindspore.tensor(np.array([2.0, 4.0, 1.0]), mindspore.float32) >>> equation = "j,i->ji" >>> output = mindspore.ops.einsum(equation, x, y) >>> print(output) [[ 2. 4. 1.] [ 4. 8. 2.] [ 6. 12. 3.]] >>> x = mindspore.tensor([1, 2, 3, 4], mindspore.float32) >>> y = mindspore.tensor([1, 2], mindspore.float32) >>> output = mindspore.ops.einsum(x, [..., 1], y, [..., 2], [..., 1, 2]) >>> print(output) [[1. 2.] [2. 4.] [3. 6.] [4. 8.]]