柚子快報(bào)邀請(qǐng)碼778899分享:numpy小知識(shí)-v2
柚子快報(bào)邀請(qǐng)碼778899分享:numpy小知識(shí)-v2
目錄預(yù)覽
1.【pytorch】——torch.unique2.python numpy判斷兩個(gè)數(shù)組相等3.Python numpy 統(tǒng)計(jì)數(shù)組某一元素的個(gè)數(shù)/ 統(tǒng)計(jì)數(shù)組滿(mǎn)足條件的元素個(gè)數(shù)3.1 np.sum() 進(jìn)行統(tǒng)計(jì)
4.如何統(tǒng)計(jì)二維或者多維空間/二維數(shù)組中重復(fù)元素的數(shù)量/計(jì)數(shù)?numpy一行代碼就行了4.1. 問(wèn)題說(shuō)明4.2. 解決之道4.3. 向原作者致敬
1.【pytorch】——torch.unique
官方文檔https://pytorch.org/docs/stable/generated/torch.unique.html
torch.unique(input, sorted=True, return_inverse=False, return_counts=False, dim=None)
默認(rèn)參數(shù)說(shuō)明 input: 待處理Tensor sorted: 是否對(duì)處理后的不包含重復(fù)元素的Tensor進(jìn)行升序排列(sorted=True表示進(jìn)行升序排列,sorted=False并非表示降序排列,這點(diǎn)容易混淆,可以看下面例1) return_inverse: 是否返回待處理Tensor中每個(gè)元素在處理后的無(wú)重復(fù)的Tensor中所對(duì)應(yīng)的索引(看例2) return_counts: 是否返回處理后的無(wú)重復(fù)元素的Tensor中每個(gè)元素在處理前Tensor中的統(tǒng)計(jì)數(shù)量(看例3) dim: 沿著哪個(gè)維度進(jìn)行unique的處理(待測(cè)試) 例1
# 下面三個(gè)例子說(shuō)明當(dāng)sorted=False時(shí)并非按照降序排列
x = torch.tensor([4,0,1,2,1,2,3,5,7])
out = torch.unique(x)
out = torch.unique(x, sorted=False)
--------------------------------------------------------------------------------
tensor([0, 1, 2, 3, 4, 5, 7])
tensor([7, 5, 3, 2, 1, 0, 4])
y = torch.tensor([3,2,4,5,6,7,3,1,3,5,7,8,9,54,1,1,1,0,1])
out = torch.unique(y)
out = torch.unique(y, sorted=False)
--------------------------------------------------------------------------------
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 54])
tensor([ 0, 54, 9, 8, 1, 7, 6, 5, 4, 2, 3])
z = torch.tensor([1,3,5,7,9,0,8,6,4,2,34,5,6,7,8,9,1,3,6,7,8,9,53,2,3])
out = torch.unique(z)
out = torch.unique(z,sorted=False)
-------------------------------------------------------------------------------
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 34, 53])
tensor([53, 2, 4, 6, 8, 0, 9, 7, 34, 5, 3, 1])
例2
x = torch.tensor([4,0,1,2,1,2,3,5,7])
out = torch.unique(x,return_inverse=True)
out = torch.unique(x,sorted=False,return_inverse=True)
--------------------------------------------------------------------------------
(tensor([0, 1, 2, 3, 4, 5, 7]), tensor([4, 0, 1, 2, 1, 2, 3, 5, 6]))
(tensor([7, 5, 3, 2, 1, 0, 4]), tensor([6, 5, 4, 3, 4, 3, 2, 1, 0]))
# 待處理Tensor:[4,0,1,2,1,2,3,5,7]
# 處理后Tensor:[0, 1, 2, 3, 4, 5, 7]
# 待處理Tensor在處理后Tensor中對(duì)應(yīng)的索引:[4, 0, 1, 2, 1, 2, 3, 5, 6]
例3
x = torch.tensor([4,0,1,2,1,2,3,5,7])
out = torch.unique(x,return_counts=True)
--------------------------------------------------------------------------------
(tensor([0, 1, 2, 3, 4, 5, 7]), tensor([1, 2, 2, 1, 1, 1, 1]))
# 處理后Tensor:[0, 1, 2, 3, 4, 5, 7]
# 處理后Tensor在處理前Tensor中的數(shù)量:[1, 2, 2, 1, 1, 1, 1]
2.python numpy判斷兩個(gè)數(shù)組相等
import numpy as np
# 創(chuàng)建兩個(gè)數(shù)組
array1 = np.array([1, 2, 3])
array2 = np.array([1, 2, 3])
array3 = np.array([4, 5, 6])
# 使用array_equal來(lái)比較
equal1 = np.array_equal(array1, array2) # 應(yīng)返回True
equal2 = np.array_equal(array1, array3) # 應(yīng)返回False
print(equal1) # 輸出: True
print(equal2) # 輸出: False
3.Python numpy 統(tǒng)計(jì)數(shù)組某一元素的個(gè)數(shù)/ 統(tǒng)計(jì)數(shù)組滿(mǎn)足條件的元素個(gè)數(shù)
我們?cè)跀?shù)據(jù)處理的時(shí)候,有時(shí)需要統(tǒng)計(jì)數(shù)組中某個(gè)元素的個(gè)數(shù),如果寫(xiě)個(gè)循環(huán)就太麻煩了,numpy中有相應(yīng)的函數(shù)進(jìn)行統(tǒng)計(jì)。
3.1 np.sum() 進(jìn)行統(tǒng)計(jì)
np.sum() 有個(gè)特性,當(dāng)數(shù)組為[True,False]時(shí)會(huì)累加True的個(gè)數(shù)
所以當(dāng)我們需要計(jì)算數(shù)組array中值value的個(gè)數(shù)時(shí),使用語(yǔ)句:np.sum(data == value) 即可
當(dāng)我們需要計(jì)算數(shù)組array中大于值value的個(gè)數(shù)時(shí),使用語(yǔ)句:np.sum(data > value) 即可
實(shí)例1 統(tǒng)計(jì)等于某元素的個(gè)數(shù):
import numpy as np
data=np.array([[1,2,3],[0,1,2],[3,4,5]])
print("查看數(shù)組中各位置是否為1 \n",data == 1)
n = np.sum(data == 1)
print("數(shù)組中1的個(gè)數(shù)",n)
輸出結(jié)果:
查看數(shù)組中各位置是否為1
[[ True False False]
[False True False]
[False False False]]
數(shù)組中1的個(gè)數(shù) 2
實(shí)例2 統(tǒng)計(jì)滿(mǎn)足條件的元素的個(gè)數(shù)
import numpy as np
data=np.array([[1,2,3],[0,1,2],[3,4,5]])
n = np.sum(data > 1)
print("數(shù)組中元素大于1的個(gè)數(shù)為",n)
結(jié)果
數(shù)組中元素大于1的個(gè)數(shù)為 6
4.如何統(tǒng)計(jì)二維或者多維空間/二維數(shù)組中重復(fù)元素的數(shù)量/計(jì)數(shù)?numpy一行代碼就行了
4.1. 問(wèn)題說(shuō)明
統(tǒng)計(jì)一維數(shù)組中重復(fù)元素的數(shù)量是個(gè)常見(jiàn)的問(wèn)題,那么拓展到二維或者更高維度,這個(gè)問(wèn)題依然是常見(jiàn)的。有什么方法能快速解決這個(gè)問(wèn)題呢?請(qǐng)接著往下看,代碼就在下邊。
4.2. 解決之道
numpy中的unique可以用來(lái)統(tǒng)計(jì)重復(fù)元素的個(gè)數(shù),但是看網(wǎng)上有些資料說(shuō)只適用于一維數(shù)組(如下圖)。 事實(shí)果真如此嗎?
我使用百度仔細(xì)檢索發(fā)現(xiàn)了一篇很有用的文章,發(fā)現(xiàn)上圖中說(shuō)的是錯(cuò)誤的,文章里邊提到了怎么統(tǒng)計(jì)二維空間中重復(fù)點(diǎn)的數(shù)量。下邊展示一下代碼:
import numpy as np
a = np.array(
[
[1, 0, 0],
[1, 0, 0],
[1, 0, 0],
[2, 3, 4]
]
)
unique, unique_counts = np.unique(
a.view(a.dtype.descr * a.shape[1]),
return_counts=True
)
運(yùn)行結(jié)果如下圖: 說(shuō)實(shí)話我看不懂view那一行是怎么個(gè)意思,但是我大受震撼。原來(lái)numpy可以如此強(qiáng)大!
哪位高人懂的可以在評(píng)論區(qū)指點(diǎn)一下。
4.3. 向原作者致敬
貼出原作圖片,。
柚子快報(bào)邀請(qǐng)碼778899分享:numpy小知識(shí)-v2
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。