Numpy 如何在PyTorch中选择二维索引?

Numpy 如何在PyTorch中选择二维索引?,numpy,pytorch,Numpy,Pytorch,给定a=torch.randn(3,2,4,5),我如何选择像(2,:,0,:),(1,:,1,:,(2,:,2,:),(0,:,3,:)(大小为(2,4,5)或(4,2,5) 而a[2,:,0,:]给出 0.5580 -0.0337 1.0048 -0.5044 0.6784 -1.6117 1.0084 1.1886 0.1278 0.3739 [torch.FloatTensor of size 2x5] 然而,a[[2,1,2,0],:,[0,1,2,3],:]给出了 T

给定
a=torch.randn(3,2,4,5)
,我如何选择像
(2,:,0,:),(1,:,1,:,(2,:,2,:),(0,:,3,:)
(大小为
(2,4,5)
(4,2,5)

a[2,:,0,:]
给出

 0.5580 -0.0337  1.0048 -0.5044  0.6784
-1.6117  1.0084  1.1886  0.1278  0.3739
[torch.FloatTensor of size 2x5]
然而,
a[[2,1,2,0],:,[0,1,2,3],:]给出了

TypeError:对张量执行基本索引时,遇到一个错误,即使用类型为list的对象索引dim 0。仅支持整数、切片、numpy标量,或者如果使用torch.LongTensor或torch.ByteSensor进行索引,则只能传递一个张量

尽管
numpy
成功地返回了
(4,2,5)
张量。

它对您有效吗

import torch

a = torch.randn(3, 2, 4, 5)
print(a.size())

b = [a[2, :, 0, :], a[1, :, 1, :], a[2, :, 2, :], a[0, :, 3, :]]
b = torch.stack(b, 0)

print(b.size()) # torch.Size([4, 2, 5])

我想得太多了,这个方法很简洁。4D数组的Torch符号与numpy的有很大不同。+1。有很多问题。这是否意味着我必须使用
来理解
b
列表,以构建
b
一般情况下?@displayname不一定。你没有提到你的整个问题,你只是提到了一个特定的问题考虑列表是解决问题的一种方法。索引实际上是由某些上下文生成的,所以我认为在实际问题中,需要为
创建一个
。谢谢。