Tensor 逐元素操作

2021-10-14 02:02:25 字數 1645 閱讀 2363

逐元素操作

這部分操作會對tensor的每乙個元素(point-wise,又名element-wise)進行操作,此類操作的輸入與輸出形狀一致。常用的操作如表3-4所示。

表3-4: 常見的逐元素操作

函式功能

abs/sqrt/div/exp/fmod/log/pow..

絕對值/平方根/除法/指數/求餘/求冪..

cos/sin/asin/atan2/cosh..

相關三角函式

ceil/round/floor/trunc

上取整/四捨五入/下取整/只保留整數部分

clamp(input, min, max)

超過min和max部分截斷

sigmod/tanh..

啟用函式

對於很多操作,例如div、mul、pow、fmod等,pytorch都實現了運算子過載,所以可以直接使用運算子。如a ** 2等價於torch.pow(a,2),a * 2等價於torch.mul(a,2)

其中clamp(x, min, max)的輸出滿足以下公式:

clamp常用在某些需要比較大小的地方,如取乙個tensor的每個元素與另乙個數的較大值。

in [71]:

a = t.arange(0, 6).view(2, 3).float()

t.cos(a)

out[71]:

tensor([[ 1.0000,  0.5403, -0.4161],

[-0.9900, -0.6536, 0.2837]])

in [72]:

a % 3 # 等價於t.fmod(a, 3)
out[72]:

tensor([[0., 1., 2.],

[0., 1., 2.]])

in [73]:

a ** 2 # 等價於t.pow(a, 2)
out[73]:

tensor([[ 0.,  1.,  4.],

[ 9., 16., 25.]])

in [74]:

# 取a中的每乙個元素與3相比較大的乙個 (小於3的截斷成3)

print(a)

t.clamp(a, min=3)

tensor([[0., 1., 2.],

[3., 4., 5.]])

out[74]:

tensor([[3., 3., 3.],

[3., 4., 5.]])

in [75]:

b = a.sin_() # 效果同 a = a.sin();b=a ,但是更高效節省視訊記憶體

a

out[75]:

tensor([[ 0.0000,  0.8415,  0.9093],

[ 0.1411, -0.7568, -0.9589]])

pytorch逐元素比較tensor大小

import torch a torch.tensor 0.01,0.011 0.009,0.9 mask a.gt 0.01 print mask tensor比較大小可以用tensor.gt屬性。上面比較了a中每個元素和0.01的大小,大於0.01的元素輸出true。輸出結果 tensor fa...

Tensor索引操作

tensor索引操作 tensor支援與numpy.ndarray類似的索引操作,語法上也類似 如無特殊說明,索引出來的結果與原tensor共享記憶體,即修改乙個,另乙個會跟著修改 import torch as t a t.randn 3,4 tensor 0.1986,0.1809,1.4662...

常用的Tensor操作

1 通過tensor.view方法可以調整tensor的形狀,但必須保證調整去前後元素總數一致。view不會修改自身的資料,返回新的tensor與原tensor共享記憶體,即更改其中的乙個,另乙個也會跟這改變。2 實際中經常需要新增或減少某一維度,可用squeeze和unsqueeze這兩函式。im...