溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Numpy怎么檢查數(shù)組全為零的幾種方法

發(fā)布時(shí)間:2021-10-18 09:10:50 來源:億速云 閱讀:217 作者:柒染 欄目:開發(fā)技術(shù)

Numpy怎么檢查數(shù)組全為零的幾種方法,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

概要

        簡單介紹幾種用于判斷numpy數(shù)組是否全零的測試方法。

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, 只能用于比如說"b!=c"這樣)。另外,"~"和"not"也是有區(qū)別的,參見以下第4節(jié)。

2 numpy.count_nonzero()

      numpy.count_nonzero()用于對數(shù)組的0元素個(gè)數(shù)進(jìn)行計(jì)數(shù),因此也可以用來執(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)行判斷

        對于多維數(shù)組(這正是numpy正真發(fā)揮強(qiáng)悍實(shí)力的地方)以上函數(shù)在缺省情況下是對整個(gè)數(shù)組進(jìn)行統(tǒng)一判斷,但是也可以通過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)于對2維數(shù)組按列判斷是否全0,指定axis=1時(shí)相當(dāng)于對2維數(shù)組按行判斷是否全0。當(dāng)然,這里所說的行和列的概念是從傳統(tǒng)的2維數(shù)組或者矩陣?yán)锢^承而來的概念,當(dāng)考慮更高維數(shù)組的時(shí)候,行和列這個(gè)概念就不再適用了。關(guān)于高維數(shù)組(也稱:Tensor,張量)的axis將另文介紹。

        另外,前面提到表示邏輯取反的“~”和“not”是有所不同的。具體來說就是,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ò)如下: 

Numpy怎么檢查數(shù)組全為零的幾種方法

        而“~”是所謂的Bitwise NOT operator.

        如果"~"的輸入是一個(gè)整數(shù)的的話,它會(huì)將輸入數(shù)的所有比特都取反。如果是一個(gè)numpy 數(shù)組的話,則會(huì)對其中每一個(gè)數(shù)執(zhí)行按位邏輯取反操作。如果是一個(gè)numpy布爾類型(True, False)數(shù)組的話,則會(huì)對其中每一個(gè)布爾數(shù)執(zhí)行邏輯取反操作。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI