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.]]