假设我们有一个张量a,维度dim(a(=[i,j,k=6,u,v]。现在,我们感兴趣的是获得维度k的整个张量,其中通道=[0:3]。我知道我们可以这样做:
B = A[:, :, 0:3, :, :]
现在我想知道是否还有更好的";蟒蛇;在不进行这种次优索引的情况下实现相同结果的方法。我的意思是。
B = subset(A, dim=2, index=[0, 1, 2])
无论在哪个框架中,即pytorch、tensorflow、numpy等
非常感谢
在numpy中,可以使用take
方法:
B = A.take([0,1,2], axis=2)
在TensorFlow中,没有比使用传统方法更简洁的方法了。使用tf.slice
将非常冗长:
B = tf.slice(A,[0,0,0,0,0],[-1,-1,3,-1,-1])
您可以潜在地使用take
的实验版本(自TF 2.4起(:
B = tf.experimental.numpy.take(A, [0,1,2], axis=2)
在PyTorch中,您可以使用index_select
:
torch.index_select(A, dim=2, index=torch.tensor([0,1,2]))
注意,您可以使用ellipsis
:跳过明确列出第一个维度(或最后一个维度(
# Both are equivalent in that case
B = A[..., 0:3, :, :]
B = A[:, :, 0:3, ...]