计算 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.