我想通过索引数组或张量删除张量列。例如:
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
Run Code Online (Sandbox Code Playgroud)
奇怪的是,没有内置函数可以做到这一点。然而,这并不是一个简单的操作。火炬张量不一定以连续的方式存储它们的数字,但它们绝对必须以周期性的方式存储它,即沿维度的步幅必须是恒定的。
如果您需要没有几列或行的张量,最简单的方法是使用索引:
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
Run Code Online (Sandbox Code Playgroud)
这将返回原始张量的副本,因为没有有效的方法来跟踪应跳过的所有元素。
如果您不想使用额外的内存,可以使用切片和视图删除列:
x[{{},{2,3}}]=x[{{},{3,4}}]
x=x:view(2,3)
Run Code Online (Sandbox Code Playgroud)
这涉及移动已删除列后面的所有数据。如果您想删除其中多个,则可以实施优化。但是,这不会减少数组使用的内存。据我所知,如果不将所需数据移动到新存储,就不可能减少内存使用量。