Lua Torch:按索引删除张量列

Lua Torch:按索引删除张量列,lua,torch,tensor,Lua,Torch,Tensor,我想通过索引数组或张量删除张量列。例如: 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

我想通过索引数组或张量删除张量列。例如:

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

奇怪的是,它没有内置函数。 然而,这不是一个简单的操作。 火炬张量不一定以连续的方式存储它们的数字,但它们绝对必须以周期的方式存储,即步幅必须沿维度保持恒定

如果您需要一个没有几列或几行的张量,最简单的方法是使用:

这将返回原始张量的副本,因为没有有效的方法跟踪所有应该跳过的元素

如果不想使用额外内存,可以使用切片和:

这涉及到在删除的列后面移动所有数据。如果您想删除其中的多个,那么可以实现优化。 但是,这不会缩小阵列使用的内存。据我所知,如果不将所需数据移动到新的存储器中,就不可能减少内存使用

 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
x[{{},{2,3}}]=x[{{},{3,4}}]
x=x:view(2,3)