gpt4 book ai didi

lua - Torch:按索引删除张量列

转载 作者:行者123 更新时间:2023-12-04 19:35:30 27 4
gpt4 key购买 nike

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

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

最佳答案

奇怪的是,没有内置函数。
然而,这不是微不足道的操作。
Torch 张量不一定以连续的方式存储它们的数字,但它们绝对必须以周期性的方式存储它,即沿维度的步幅必须是恒定的。

如果您需要一个没有几列或几行的张量,最简单的方法是使用 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

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

如果您不想使用额外的内存,可以使用 slices 和 views 去掉一列:
x[{{},{2,3}}]=x[{{},{3,4}}]
x=x:view(2,3)

这涉及移动已删除列后面的所有数据。如果要删除其中的多个,则可能会实现优化。
但是,这不会缩小数组使用的内存。据我所知,在不将所需数据移动到新存储的情况下,不可能减少内存使用量。

关于lua - Torch:按索引删除张量列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43431259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com