[英]How to do a “element by element in-place inverse” with pytorch?
給定一個數組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
的數組b
替換1.0
,它的長度等於a
的長度,它就可以工作。 缺點是我必須為b
分配內存。 我還可以執行類似a = 1.0 / a
,這將再次分配額外的(臨時)內存。
如何理想地在廣播中有效地“就地”執行此操作(無需分配額外的內存)?
Pytorch遵循使用_
進行就地操作的約定。 例如
add -> add_ # in-place equivalent
div -> div_ # in-place equivalent
etc
逐個元素就位逆。
>>> 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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.