Numpy如何檢查數組全為零的幾種方法
概要
簡單介紹幾種用於判斷numpy數組是否全零的測試方法。
1 numpy.any()
numpy.any()函數用於檢查一個numpy數字是否存在任何一個非0元素,因此將numpy.any()的結果取反即得“numpy數組是否全0”的結果。例如:
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)))
輸出結果:
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”,但是不能用“!”(“!=”是比較運算符–comparison operator, 隻能用於比如說”b!=c”這樣)。另外,”~”和”not”也是有區別的,參見以下第4節。
2 numpy.count_nonzero()
numpy.count_nonzero()用於對數組的0元素個數進行計數,因此也可以用來執行是否全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()也可以實現這一功能。以下例子利用瞭python內部會自動進行0–False, 1–True的轉換。
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. 多維數組可以分axis進行判斷
對於多維數組(這正是numpy正真發揮強悍實力的地方)以上函數在缺省情況下是對整個數組進行統一判斷,但是也可以通過axis參數指定沿指定軸分別處理。如下例所示:
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]
當指定axis=0時相當於對2維數組按列判斷是否全0,指定axis=1時相當於對2維數組按行判斷是否全0。當然,這裡所說的行和列的概念是從傳統的2維數組或者矩陣裡繼承而來的概念,當考慮更高維數組的時候,行和列這個概念就不再適用瞭。關於高維數組(也稱:Tensor,張量)的axis將另文介紹。
另外,前面提到表示邏輯取反的“~”和“not”是有所不同的。具體來說就是,not隻接受一個操作數,因此以上這個例子如果將”~”改為not的話會報錯,如下所示:
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)))
報錯如下:
而“~”是所謂的Bitwise NOT operator.
如果”~”的輸入是一個整數的的話,它會將輸入數的所有比特都取反。如果是一個numpy 數組的話,則會對其中每一個數執行按位邏輯取反操作。如果是一個numpy佈爾類型(True, False)數組的話,則會對其中每一個佈爾數執行邏輯取反操作–以上例子中正是這種用法。
到此這篇關於Numpy如何檢查數組全為零的幾種方法的文章就介紹到這瞭,更多相關Numpy 檢查數組全為零內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python Numpy教程之排序,搜索和計數詳解
- 初識python的numpy模塊
- Python數據分析之Numpy庫的使用詳解
- python數學建模是加深Numpy和Pandas學習
- Python NumPy教程之數組的創建詳解