計算 NumPy 陣列中的零

Vaibhav Vaibhav 2023年1月30日
  1. 使用 count_nonzero() 計算 NumPy 陣列中的零
  2. 使用 where() 計算 NumPy 陣列中的零
計算 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() 函式返回這些元素的索引。我們進一步使用這些索引來獲取原始元素。顯然,它們都將為零。最後,我們計算了這些零的數量並列印了計數。

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.