Numpy如何檢查數(shù)組全為零的幾種方法
概要
簡(jiǎn)單介紹幾種用于判斷numpy數(shù)組是否全零的測(cè)試方法。
1 numpy.any()
numpy.any()函數(shù)用于檢查一個(gè)numpy數(shù)字是否存在任何一個(gè)非0元素,因此將numpy.any()的結(jié)果取反即得“numpy數(shù)組是否全0”的結(jié)果。例如:
import numpy as np print('Using numpy.any()...') a_1D = np.zeros(5) print('Is a_1D all zeros?: ', not(np.any(a_1D))) print('Is a_1D all zeros?: ', ~(np.any(a_1D))) a_1D[2] = -1 print('Is a_1D all zeros?: ', not(np.any(a_1D))) a_2D = np.zeros((2,3)) print(a_2D) print('Is a_2D all zeros?: ', not(np.any(a_2D))) a_2D[1,2] = 0.1 print('Is a_2D all zeros?: ', not(np.any(a_2D)))
輸出結(jié)果:
Using numpy.any()...
Is a_1D all zeros?: True
Is a_1D all zeros?: True
Is a_1D all zeros?: False
[[0. 0. 0.]
[0. 0. 0.]]
Is a_2D all zeros?: True
Is a_2D all zeros?: False
注意,python中邏輯取反可以用"~"也可以用"not",但是不能用“!”(“!=”是比較運(yùn)算符--comparison operator, 只能用于比如說(shuō)"b!=c"這樣)。另外,"~"和"not"也是有區(qū)別的,參見(jiàn)以下第4節(jié)。
2 numpy.count_nonzero()
numpy.count_nonzero()用于對(duì)數(shù)組的0元素個(gè)數(shù)進(jìn)行計(jì)數(shù),因此也可以用來(lái)執(zhí)行是否全0的判斷。用法如下:
print('Using numpy.nonzero()...') a = np.array([1,2,3,0,0,1]) print('Number of zeros in a = ',np.count_nonzero(a)) print('Is a all zeros?: ', np.count_nonzero(a)==0) a[:] = 0 # Force a to all-zeros array print('Is a all zeros?: ', np.count_nonzero(a)==0) print('Is a all zeros?: ', not np.count_nonzero(a))
Using numpy.nonzero()...
Number of zeros in a = 4
Is a all zeros?: False
Is a all zeros?: True
Is a all zeros?: True
3 numpy.all()
用numpy.all()也可以實(shí)現(xiàn)這一功能。以下例子利用了python內(nèi)部會(huì)自動(dòng)進(jìn)行0--False, 1--True的轉(zhuǎn)換。
print('') print('Using numpy.all()...') a = np.zeros(10) print('Is a all zeros?: ', np.all(a==0))
Using numpy.all()...
Is a all zeros?: True
4. 多維數(shù)組可以分axis進(jìn)行判斷
對(duì)于多維數(shù)組(這正是numpy正真發(fā)揮強(qiáng)悍實(shí)力的地方)以上函數(shù)在缺省情況下是對(duì)整個(gè)數(shù)組進(jìn)行統(tǒng)一判斷,但是也可以通過(guò)axis參數(shù)指定沿指定軸分別處理。如下例所示:
print('') print('Judge according to the specified axis') a_2D = np.zeros((2,3)) a_2D[1,2] = 0.1 print(a_2D) print('Is each col of a_2D all zeros?: ', ~(np.any(a_2D, axis=0))) print('Is each row of a_2D all zeros?: ', ~(np.any(a_2D, axis=1)))
Judge according to the specified axis
[[0. 0. 0. ]
[0. 0. 0.1]]
Is each col of a_2D all zeros?: [ True True False]
Is each row of a_2D all zeros?: [ True False]
當(dāng)指定axis=0時(shí)相當(dāng)于對(duì)2維數(shù)組按列判斷是否全0,指定axis=1時(shí)相當(dāng)于對(duì)2維數(shù)組按行判斷是否全0。當(dāng)然,這里所說(shuō)的行和列的概念是從傳統(tǒng)的2維數(shù)組或者矩陣?yán)锢^承而來(lái)的概念,當(dāng)考慮更高維數(shù)組的時(shí)候,行和列這個(gè)概念就不再適用了。關(guān)于高維數(shù)組(也稱:Tensor,張量)的axis將另文介紹。
另外,前面提到表示邏輯取反的“~”和“not”是有所不同的。具體來(lái)說(shuō)就是,not只接受一個(gè)操作數(shù),因此以上這個(gè)例子如果將"~"改為not的話會(huì)報(bào)錯(cuò),如下所示:
print('Is each col of a_2D all zeros?: ', not(np.any(a_2D, axis=0))) print('Is each row of a_2D all zeros?: ', not(np.any(a_2D, axis=1)))
報(bào)錯(cuò)如下:
而“~”是所謂的Bitwise NOT operator.
如果"~"的輸入是一個(gè)整數(shù)的的話,它會(huì)將輸入數(shù)的所有比特都取反。如果是一個(gè)numpy 數(shù)組的話,則會(huì)對(duì)其中每一個(gè)數(shù)執(zhí)行按位邏輯取反操作。如果是一個(gè)numpy布爾類型(True, False)數(shù)組的話,則會(huì)對(duì)其中每一個(gè)布爾數(shù)執(zhí)行邏輯取反操作--以上例子中正是這種用法。
到此這篇關(guān)于Numpy如何檢查數(shù)組全為零的幾種方法的文章就介紹到這了,更多相關(guān)Numpy 檢查數(shù)組全為零內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序
這篇文章主要介紹了Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04圖神經(jīng)網(wǎng)絡(luò)GNN算法基本原理詳解
這篇文章主要為大家介紹了圖神經(jīng)網(wǎng)絡(luò)GNN算法基本原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05python中__call__內(nèi)置函數(shù)用法實(shí)例
這篇文章主要介紹了python中__call__內(nèi)置函數(shù)用法,實(shí)例分析了python中__call__內(nèi)置函數(shù)的原理與使用技巧,需要的朋友可以參考下2015-06-06Python3之讀取連接過(guò)的網(wǎng)絡(luò)并定位的方法
下面小編就為大家分享一篇Python3之讀取連接過(guò)的網(wǎng)絡(luò)并定位的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04