【问题标题】:Torch - narrow() without memory copyTorch - 没有内存副本的narrow()
【发布时间】:2016-09-07 03:07:18
【问题描述】:

有什么方法可以使用:narrow 并避免复制? IE。 :resize:reshape 的就地版本,narrow 有对应的版本吗?

【问题讨论】:

    标签: torch


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      相关资源
      最近更新 更多