如何用一组指数切割火炬张量?

时间:2016-03-03 03:12:38

标签: slice torch

我想知道是否有一种通过一组指数切割张量的有效方法?在Matlab中,我可以执行以下操作:

A = rand(2, 3, 6);
B = A(:,:, 1:2:end);

然后B是A的第1,第3和第5个切片。

在Torch中,似乎你只能连续切片。这是真的吗?

如果我可以通过诸如

之类的任意索引获得子集,那么更普遍的问题是
A(:, :, [1 2 6]) 

在Matlab中。

提前致谢!

1 个答案:

答案 0 :(得分:2)

使用http://atomlinter.github.io/运算符,例如:

t = torch.rand(2, 3, 6)
-- (1,.,.) = 
--   0.1790  0.7774  0.5343  0.0628  0.3077  0.7203
--   0.0677  0.5847  0.2401  0.6885  0.8724  0.4413
--   0.1849  0.2704  0.2745  0.5508  0.4634  0.6340
-- 
-- (2,.,.) = 
--   0.2523  0.6135  0.6037  0.0194  0.6456  0.0229
--   0.9966  0.8688  0.2078  0.7169  0.1528  0.5708
--   0.8671  0.7731  0.4596  0.0636  0.8873  0.2205
-- [torch.DoubleTensor of size 2x3x6]


t:index(3, torch.LongTensor{1, 3, 5})
-- (1,.,.) = 
--   0.1790  0.5343  0.3077
--   0.0677  0.2401  0.8724
--   0.1849  0.2745  0.4634
-- 
-- (2,.,.) = 
--   0.2523  0.6037  0.6456
--   0.9966  0.2078  0.1528
--   0.8671  0.4596  0.8873
-- [torch.DoubleTensor of size 2x3x3]

您也可以t:index(3, torch.LongTensor{1, 2, 6})