沿着特定维度和特定通道索引整个张量



假设我们有一个张量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, ...]

最新更新