【发布时间】:2016-09-07 03:07:18
【问题描述】:
有什么方法可以使用:narrow 并避免复制? IE。 :resize 是 :reshape 的就地版本,narrow 有对应的版本吗?
【问题讨论】:
标签: torch
有什么方法可以使用:narrow 并避免复制? IE。 :resize 是 :reshape 的就地版本,narrow 有对应的版本吗?
【问题讨论】:
标签: torch
如文档中所述,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。
【讨论】: