詳解PyTorch中Tensor的高階操作
條件選?。簍orch.where(condition, x, y) → Tensor
返回從 x 或 y 中選擇元素的張量,取決于 condition
操作定義:

舉個(gè)例子:
>>> import torch
>>> c = randn(2, 3)
>>> c
tensor([[ 0.0309, -1.5993, 0.1986],
[-0.0699, -2.7813, -1.1828]])
>>> a = torch.ones(2, 3)
>>> a
tensor([[1., 1., 1.],
[1., 1., 1.]])
>>> b = torch.zeros(2, 3)
>>> b
tensor([[0., 0., 0.],
[0., 0., 0.]])
>>> torch.where(c > 0, a, b)
tensor([[1., 0., 1.],
[0., 0., 0.]])
把張量中的每個(gè)數(shù)據(jù)都代入條件中,如果其大于 0 就得出 a,其它情況就得出 b,同樣是把 a 和 b 的相同位置的數(shù)據(jù)導(dǎo)出。
查表搜集:torch.gather(input, dim, index, out=None) → Tensor
沿給定軸 dim,將輸入索引張量 index 指定位置的值進(jìn)行聚合
對(duì)一個(gè)3維張量,輸出可以定義為:
- out[i][j][k] = tensor[index[i][j][k]][j][k] # dim=0
- out[i][j][k] = tensor[i][index[i][j][k]][k] # dim=1
- out[i][j][k] = tensor[i][j][index[i][j][k]] # dim=3
舉個(gè)例子:
>>> a = torch.randn(4, 10)
>>> b = a.topk(3, dim = 1)
>>> b
(tensor([[ 1.0134, 0.8785, -0.0373],
[ 1.4378, 1.4022, 1.0115],
[ 0.8985, 0.6795, 0.6439],
[ 1.2758, 1.0294, 1.0075]]), tensor([[5, 7, 6],
[2, 5, 8],
[5, 9, 2],
[7, 9, 6]]))
>>> index = b[1]
>>> index
tensor([[5, 7, 6],
[2, 5, 8],
[5, 9, 2],
[7, 9, 6]])
>>> label = torch.arange(10) + 100
>>> label
tensor([100, 101, 102, 103, 104, 105, 106, 107, 108, 109])
>>> torch.gather(label.expand(4, 10), dim=1, index=index.long()) # 進(jìn)行聚合操作
tensor([[105, 107, 106],
[102, 105, 108],
[105, 109, 102],
[107, 109, 106]])
把 label 擴(kuò)展為二維數(shù)據(jù)后,以 index 中的每個(gè)數(shù)據(jù)為索引,取出在 label 中索引位置的數(shù)據(jù),再以 index 的的位置擺放。
比如,最后得出的結(jié)果中,第一行的 105 就是 label.expand(4, 10) 中第一行中索引為 5 的數(shù)據(jù),提取出來(lái)后放在 5 所在的位置。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
pycharm實(shí)現(xiàn)在虛擬環(huán)境中引入別人的項(xiàng)目
這篇文章主要介紹了pycharm實(shí)現(xiàn)在虛擬環(huán)境中引入別人的項(xiàng)目,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-03-03
python獲取點(diǎn)擊的坐標(biāo)畫圖形的方法
今天小編就為大家分享一篇python獲取點(diǎn)擊的坐標(biāo)畫圖形的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-07-07
PyQt5+serial模塊實(shí)現(xiàn)一個(gè)串口小工具
這篇文章主要為大家詳細(xì)介紹了如何利用PyQt5和serial模塊實(shí)現(xiàn)一個(gè)簡(jiǎn)單的串口小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-01-01
Python讀取sqlite數(shù)據(jù)庫(kù)文件的方法分析
這篇文章主要介紹了Python讀取sqlite數(shù)據(jù)庫(kù)文件的方法,結(jié)合實(shí)例形式分析了Python引入sqlite3模塊操作sqlite數(shù)據(jù)庫(kù)的讀取、SQL命令執(zhí)行等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
Python第三方庫(kù)qrcode或MyQr生成博客地址二維碼
使用第三方庫(kù)qrcode或者M(jìn)yQr給自己的博客網(wǎng)址快速生成二維碼,一鍵分享,文中含有詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
Python scipy實(shí)現(xiàn)差分進(jìn)化算法
差分進(jìn)化算法是廣義的遺傳算法的一種,核心思想是變異,這篇文章主要為大家介紹的則是著名的scipy庫(kù)中對(duì)差分進(jìn)化算法的實(shí)現(xiàn),希望對(duì)大家有所幫助2023-08-08
python matplotlib庫(kù)繪制散點(diǎn)圖例題解析
這篇文章主要介紹了python matplotlib庫(kù)繪制散點(diǎn)圖例題解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

