簡體   English   中英

如何用pytorch進行“逐個元素就地逆運算”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM