当前位置: 首页> 教育> 高考 > Tensor列表索引本质

Tensor列表索引本质

时间:2025/7/11 19:22:38来源:https://blog.csdn.net/Akun_2217/article/details/140497726 浏览次数:0次
张量列表索引本质
单列表索引

将原张量shape对应位置数字更改为索引列表的形状

data = torch.randn((9, 512, 30))
index_list = [0, 1, 3]
print(data[:, index_list].shape)
'''
[[9, 3, 30]]
'''# torch.Size([1, 6, 5])
index2_list = torch.IntTensor([[[4, 5, 6, 7, 8],[4, 5, 6, 7, 8],[4, 5, 6, 7, 8],[4, 5, 6, 7, 8],[4, 5, 6, 7, 8],[4, 5, 6, 7, 8]]])
print(data[:, index2_list].shape)
# torch.Size([6, 1, 6, 5, 30])
多列表索引

双列表索引本质就是索引列表之间通过广播机制,达成一致。

data = torch.randn((6, 512, 30))
# index1: torch.Size([1, 6, 5])
index1 = torch.IntTensor([[[4, 5, 6, 7, 8],[4, 5, 6, 7, 8],[4, 5, 6, 7, 8],[4, 5, 6, 7, 8],[4, 5, 6, 7, 8],[4, 5, 6, 7, 8]]])# index2: torch.Size([5])
index2 = torch.IntTensor([0, 1, 2, 3, 4])# 双列表索引
print(data[index1, index2].size())
'''
torch.Size([1, 6, 5, 30])
'''# 三列表索引
print(data[index1, index2, index1].size())
'''
torch.Size([1, 6, 5])
'''
列表索引本质

多列表是先广播。

如果是单列表:

  • [1] 返回:[data[1]]

  • [1, 2, 3], 返回:[data[1], data[2], data[3]]

  • [[1, 2, 3]],返回: [ [ data[1], data[2], data[3] ] ]

如果是双列表:

  • [1], [2] : 返回:[ data[1, 2] ]
  • [[1]], [1, 2] : 先广播:[[1, 1]], [[1, 2]] 重叠 [[(1,1), (1, 2)]] 返回: [ [ data[1, 1], data[1,2] ] ]

多列表以此类推。

关键字:Tensor列表索引本质

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: