2017-04-15 111 views
0

テンソル列を配列またはテンソルのインデックスで削除したいと思います。例:トーチ:テンソル列をインデックスで削除する

th> X = torch.rand(2,4) 

th> X 
0.7475 0.2512 0.6085 0.6414 
0.7143 0.8299 0.2929 0.6945 
[torch.DoubleTensor of size 2x4] 

th> indices = torch.zeros(2) 

th> indices[1] = 1 

th> indices[2] = 3 

th> indices 
1 
3 
[torch.DoubleTensor of size 2] 

th> X:delete(indices) 
0.2512 0.6414 
0.8299 0.6945 

答えて

3

奇妙なことに、それには組み込み関数はありません。 しかし、それは簡単な操作ではありません。 トーチのテンソルは必ずしも連続した形で数値を格納しているわけではありませんが、周期的に格納する必要があります。つまり、ストライドは次元に沿って一定でなければなりません。

あなたはいくつかの列または行のないテンソルが必要な場合は、最も簡単な方法は、indexを使用することです:

x=torch.Tensor{{1,2,3,4,},{5,6,7,8,}} 
y=x:index(2,torch.LongTensor{1,3,4}) 
--return: 
    1 3 4 
    5 7 8 

すべてのトラックを保つために何の効率的な方法はありませんので、これは、元のテンソルのコピーを返します。スキップされるべき要素。

あなたがスライスを使用して、列を取り除くとviews得ることができ、追加のメモリを使用しない場合:

x[{{},{2,3}}]=x[{{},{3,4}}] 
x=x:view(2,3) 

これは、周りの削除、列の後ろのすべてのデータを移動する必要があります。それらの複数を削除する場合は、最適化が実装されている可能性があります。 これは配列によって使用されるメモリを縮小しません。私が知る限り、必要なデータを新しいストレージに移動することなくメモリ使用量を減らすことは不可能です。

関連する問題