比较与torch.take的差异
torch.Tensor.take
torch.Tensor.take(indices)
更多内容详见torch.Tensor.take。
mindspore.Tensor.take
mindspore.Tensor.take(indices, axis=None, mode='clip')
更多内容详见mindspore.Tensor.take。
使用方式
MindSpore此API功能与PyTorch基本一致。
PyTorch:获取Tensor中的元素。不可指定维度,使用展开的输入数组。若索引超出范围,则抛出异常。
MindSpore:在指定维度上获取Tensor中的元素。可以指定维度,默认使用展开的输入数组。若索引超出范围:mode为’raise’时,则抛出异常;mode为’wrap’时,绕接;mode为’raise’时,裁剪到范围。
| 分类 | 子类 | PyTorch | MindSpore | 差异 | 
|---|---|---|---|---|
| 参数 | 参数 1 | indices | indices | 无 | 
| 参数 2 | axis | 指定获取的索引,Pytorch不支持 | ||
| 参数 3 | mode | 若索引超出范围时的行为模式选择,Pytorch不支持 | 
代码示例 1
# PyTorch
import torch
input_x1 = torch.tensor([[4, 3, 5], [6, 7, 8]])
indices = torch.tensor([0, 2, 4])
output = input_x1.take(indices)
print(output)
# tensor([4, 5, 7])
# MindSpore
import mindspore as ms
input_x1 = ms.Tensor([[4, 3, 5], [6, 7, 8]])
indices = ms.Tensor([0, 2, 4])
output = input_x1.take(indices)
print(output)
# [4 5 7]
代码示例 2
# PyTorch
import torch
input_x1 = torch.tensor([[4, 3, 5], [6, 7, 8]])
indices = torch.tensor([0, 2, 8])
output = input_x1.take(indices)
print(output)
# IndexError: out of range: tried to access index 8 on a tensor of 6 elements
# MindSpore
import mindspore as ms
input_x1 = ms.Tensor([[4, 3, 5], [6, 7, 8]])
indices = ms.Tensor([0, 2, 8])
output = input_x1.take(indices, mode='clip')
print(output)
# [4 5 8]