gpt4 book ai didi

python - 如何用pytorch做一个 "element by element in-place inverse"?

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:50 24 4
gpt4 key购买 nike

给定一个数组a:

a = np.arange(1, 11, dtype = 'float32')

使用 numpy,我可以执行以下操作:

np.divide(1.0, a, out = a)

导致:

array([1.        , 0.5       , 0.33333334, 0.25      , 0.2       ,
0.16666667, 0.14285715, 0.125 , 0.11111111, 0.1 ],
dtype=float32)

假设 a 是一个 pytorch 张量,以下操作失败:

torch.div(1.0, a, out = a)

div 的第一个参数应该是匹配长度/形状的张量。

如果我用一个数组 b 替换 1.0,它的长度等于 a 的长度,它就可以工作。缺点是我必须为 b 分配内存。我还可以执行类似 a = 1.0/a 的操作,这将再次分配额外的(临时)内存。

我怎样才能有效地“就地”执行此操作(无需分配额外内存),最好是通过广播?

最佳答案

Pytorch 遵循使用 _ 进行就地操作的约定。例如

add -> add_  # in-place equivalent
div -> div_ # in-place equivalent
etc

逐个元素inplace inverse。

>>> a = torch.arange(1, 11, dtype=torch.float32) 
>>> a.pow_(-1)
>>> a
>>> tensor([1.0000, 0.5000, 0.3333, 0.2500, 0.2000, 0.1667, 0.1429, 0.1250, 0.1111, 0.1000])

>>> a = torch.arange(1, 11, dtype=torch.float32) 
>>> a.div_(a ** a)
>>> a
>>> tensor([1.0000, 0.5000, 0.3333, 0.2500, 0.2000, 0.1667, 0.1429, 0.1250, 0.1111, 0.1000])

关于python - 如何用pytorch做一个 "element by element in-place inverse"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53350677/

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