火炬 - 窄()没有内存复制

时间:2016-05-11 15:37:10

标签: torch

有没有办法使用:narrow并避免制作副本?即:resize:reshape的原位版本,是否有等效的缩写?

1 个答案:

答案 0 :(得分:1)

如文档中所述,narrow不执行内存复制:

  

对于方法narrowselectsub,返回的张量与原始张量共享Storage。因此,子张量的存储器中的任何修改都将对初级张量产生影响,反之亦然。这些方法非常快,因为它们不涉及任何内存复制

示例:

th> x = torch.Tensor{{1, 2}, {3, 4}}

th> y = x:narrow(1, 2, 1)

th> print(x:storage():data())
cdata<double *>: 0x0079f240

th> print(y:storage():data())
cdata<double *>: 0x0079f240

他们只返回一个新的张量,即在幕后使用相同存储的新对象

如果您确实想要就地修改原始张量,可以使用set

th> x:set(y)
 3  4
[torch.DoubleTensor of size 1x2]

甚至更简单x = y