有没有办法使用:narrow
并避免制作副本?即:resize
是:reshape
的原位版本,是否有等效的缩写?
答案 0 :(得分:1)
如文档中所述,narrow
不执行内存复制:
对于方法
narrow
,select
和sub
,返回的张量与原始张量共享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
。