計算 NumPy 陣列中的零
有時,我們必須對陣列中的元素進行計數。在計數時,我們有時會關聯一個條件並計算滿足該條件的元素。它可以是大於條件,小於條件,等於條件等。
在本文中,我們將學習如何有效地計算 NumPy 陣列中的零。
NumPy 附帶了我們可以應用於多維 NumPy 陣列和矩陣的各種方法。它還具有一些可用於計數零的功能。
本文將討論兩種這樣的方法,count_nonzero()
和 where()
。
使用 count_nonzero()
計算 NumPy 陣列中的零
顧名思義,此方法計算非零元素。我們將使用此函式來計數零。
count_nonzero()
返回一個整數值或一個整數值陣列。
count_nonzero()
的語法如下。
count_nonzero(a, axis, keepdims)
它具有以下引數。
a
- 函式將在其中計數零的陣列axis
- 這是一個可選引數,它是指將沿其計算非零元素的軸或軸元組。此引數的預設值為None
,這意味著將在展平的陣列上進行計數。keepdims
- 這是一個可選的布林引數。預設情況下,它是False
。如果設定為True
,則計數的軸將保留為尺寸為 1 的尺寸。
現在,讓我們使用此方法計算零。有關第一種方法,請參考以下程式碼段。
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(f"Number of Non-Zeroes in Array --> {np.count_nonzero(myArray)}")
print(f"Number of Non-Zeroes in Matrix --> {np.count_nonzero(myMatrix)}")
print(f"Number of Zeroes in Array --> {myArray.size - np.count_nonzero(myArray)}")
print(f"Number of Zeroes in Matrix --> {myMatrix.size - np.count_nonzero(myMatrix)}")
輸出:
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
Number of Non-Zeroes in Array --> 6
Number of Non-Zeroes in Matrix --> 8
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
在上面的程式碼片段中,我們要做的就是計算非零元素的數量,然後從陣列或矩陣的總大小中減去非零元素的數量。
此解決方案可能不是此函式的最佳用途,但下面的方案是。
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray == 0)
print(myMatrix == 0)
print(f"Number of Zeroes in Array --> {np.count_nonzero(myArray == 0)}")
print(f"Number of Zeroes in Matrix --> {np.count_nonzero(myMatrix == 0)}")
輸出:
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
[False False True False False True False False True]
[[ True True False False]
[ True False True False]
[False True False True]
[False False True True]]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
該解決方案的核心是以下原則:電腦科學中任何 false
的值都可以表示為 0
,而 true
的值可以表示為非零值。
myArray == 0
語句返回一個陣列,其中滿足該屬性的所有元素均為 True,不滿足該條件的元素均為 False。條件本身檢查元素是否為零。因此,所有零元素都將變為 True
,現在,我們必須對它們進行計數。為此,我們使用 count_nonzero()
方法。
此處是該功能的官方文件的連結。
使用 where()
計算 NumPy 陣列中的零
where()
函式根據指定條件過濾陣列中的元素,並返回過濾後的陣列。它返回已過濾元素的索引。使用此函式,我們將構建一個僅包含零的陣列,而這個新陣列的長度將為我提供零計數。
現在,讓我們看看解決方案。
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray[np.where(myArray == 0)])
print(myMatrix[np.where(myMatrix == 0)])
print(f"Number of Zeroes in Array --> {myArray[np.where(myArray == 0)].size}")
print(f"Number of Zeroes in Matrix --> {myMatrix[np.where(myMatrix == 0)].size}")
輸出:
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
[0 0 0]
[0 0 0 0 0 0 0 0]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
在上面的程式碼片段中,我們過濾掉了所有零元素。where()
函式返回這些元素的索引。我們進一步使用這些索引來獲取原始元素。顯然,它們都將為零。最後,我們計算了這些零的數量並列印了計數。