1. bool矩陣當(dāng)做索引(類型是:BoolTensor)
結(jié)果為一維向量(因為bool矩陣二維的,根據(jù)bool矩陣中True對應(yīng)位置,把tensor數(shù)據(jù)中相應(yīng)位置中的值取出來,組成一個新的一維tensor向量)
#布爾索引 用布爾索引總是會返回一份新創(chuàng)建的數(shù)據(jù),原本的數(shù)據(jù)不會被改變。
a2 = np.arange(15).reshape(3,5)
print('a2===',a2)
mask = a2<5
b2 = a2[mask]
print('b2===',b2)
b2[0] = 17
print('a2===',a2) #修改b2中的數(shù)據(jù),會發(fā)現(xiàn)原數(shù)據(jù)a2中的值沒有發(fā)生改變。
輸出結(jié)果:
a2=== tensor([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
b2=== tensor([0, 1, 2, 3, 4])
a2=== tensor([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
2. 一維bool向量當(dāng)做索引(類型是:BoolTensor)
第一個例子:結(jié)果為一維向量(target是一維的)
target = torch.Tensor([1,0,0,2,0,0,3])
mask = (target > 0)
masked_target = target[mask]
print(target)
print(mask)
print(masked_target)
輸出結(jié)果如下:
tensor([1., 0., 0., 2., 0., 0., 3.])
tensor([ True, False, False, True, False, False, True])
tensor([1., 2., 3.])
第二個例子:結(jié)果為一個二維的向量(x是二維的)
x = torch.randn(4,3)
y = torch.tensor([True,False,False,True])
print('x===',x)
print('y===',y)
print('x[y]===',x[y])
print('y.sum()===',y.sum())
輸出結(jié)果:
x===tensor([[ 0.4563, 0.3963, 0.4101],
[-0.4360, -0.2968, 1.0010],
[ 0.2851, 0.0890, 0.5452],
[ 0.8384, -1.1912, 0.2131]])
y===tensor([ True, False, False, True])
x[y]===tensor([[ 0.4563, 0.3963, 0.4101],
[ 0.8384, -1.1912, 0.2131]])
y.sum()===tensor(2)
3. torch.masked_select() 根據(jù)bool矩陣取出tensor中對應(yīng)位置元素(類型是:BoolTensor)。
torch.masked_select(input, mask, *, out=None) → Tensor
此方法中mask是一個bool矩陣,在input中取出mask中True對應(yīng)的值。
首先介紹參數(shù):
- input(tensor):需要進行處理的tensor。
- mask(BoolTensor):包含了二進制掩碼,要進行索引的tensor。
- out:輸出的結(jié)果tensor(結(jié)果為一維tensor)。
使用方法如下:
第一個例子:
>>> x = torch.randn(3, 4)
>>> x
tensor([[ 0.3552, -2.3825, -0.8297, 0.3477],
[-1.2035, 1.2252, 0.5002, 0.6248],
[ 0.1307, -2.0608, 0.1244, 2.0139]])
>>> mask = x.ge(0.5)
>>> mask
tensor([[False, False, False, False],
[False, True, True, True],
[False, False, False, True]])
>>> torch.masked_select(x, mask)
tensor([ 1.2252, 0.5002, 0.6248, 2.0139])
第二個例子:
target = torch.Tensor([1,0,0,2,0,0,3])
mask = target.ge(0)
masked_target = torch.masked_select(target, mask)
print(target)
print(mask)
print(masked_target)
輸出結(jié)果為:
tensor([1., 0., 0., 2., 0., 0., 3.])
tensor([ True, False, False, True, False, False, True])
tensor([1., 2., 3.])
使用方法其實挺明顯的,就是把input與mask相對應(yīng)起來,取出mask中True所對應(yīng)位置的數(shù)據(jù),組成一維的tensor。文章來源:http://www.zghlxwxcb.cn/news/detail-409593.html
注意:mask和input的形狀可以不相同,但是它們必須是可以廣播的。并且返回tensor和原tensor使用不同的內(nèi)存,相互獨立。文章來源地址http://www.zghlxwxcb.cn/news/detail-409593.html
4. 參考鏈接
- Python基礎(chǔ) 切片索引、布爾索引、花式索引
- Pytorch中Tensor的索引,切片以及花式索引(fancy indexing)
- pytorch中bool類型的張量作為索引
- pytorch中幾種tensor掩碼的獲取方法(含代碼)
- pytorch每日一學(xué)35(torch.masked_select())根據(jù)bool矩陣取出tensor中對應(yīng)位置元素
到了這里,關(guān)于pytorch 根據(jù)bool矩陣取出tensor中對應(yīng)位置元素的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!