我想知道是否有一种通过一组指数切割张量的有效方法?在Matlab中,我可以执行以下操作:
A = rand(2, 3, 6);
B = A(:,:, 1:2:end);
然后B是A的第1,第3和第5个切片。
在Torch中,似乎你只能连续切片。这是真的吗?
如果我可以通过诸如
之类的任意索引获得子集,那么更普遍的问题是A(:, :, [1 2 6])
在Matlab中。
提前致谢!
答案 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})
。