2016-03-03 62 views
2

我想知道是否有一種有效的方法來通過一組索引切片張量?在Matlab中,我能做到以下幾點:如何用一組索引切割割炬張量?

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

,則B是第1,第3,第5和A.

在火炬的片段,看來你只能用一個連續範圍切片。真的嗎?

一個更普遍的問題將是,如果我能得到通過任意索引的一個子集,如

A(:, :, [1 2 6]) 
在Matlab

在此先感謝!

回答

2

使用index操作,例如:

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})