Python中的NumPy.nonzero()方法

2025年3月5日 | 阅读 4 分钟

理解 Python 的 NumPy.nonzero() 方法

NumPy (Numerical Python 的简称) 是一个强大的 Python 数值计算包。它支持大规模、多维数组和矩阵,以及一套用于有效控制这些数组的数学函数。NumPy 的众多有用函数之一就是 numpy.nonzero()。

nonzero() 方法返回数组中所有非零元素的索引。当您想识别满足特定条件的元素的索引或从数组中提取非零元素时,它特别有用。

以下是如何使用 nonzero() 函数

代码

输出

 
Indices of non-zero elements: (array([1, 2, 4, 5]),)   

在这种情况下,nonzero() 方法会生成一个元组,其中包含一个包含非零元素的索引数组。在本例中,数组 '[0, 1, 2, 0, 3, 5, 0]' 在索引 1、2、4 和 5 处有非零值。

nonzero() 也兼容多维数组。在这些情况下,它会生成一个由数组组成的元组,每个数组表示沿着特定轴的非零元素的索引。

代码

输出

 
Indices of non-zero elements in 2D array are: (array([0, 1, 2, 2]), array([0, 1, 0, 1]))   

在这里,nonzero() 函数返回两个数组。第一个数组包含非零元素的行索引,第二个数组包含列索引。例如,(0, 0) 对应于元素 1,(1, 1) 对应于元素 2,依此类推。

让我们更深入地了解 Python 的 numpy.nonzero() 函数。

1. NumPy 的布尔索引

当布尔索引与 numpy.nonzero() 函数结合使用时,通常的做法是检索满足给定标准的数组中的元素。例如

代码

输出

 
Indices of positive elements: (array([0, 2, 5]),)   

此示例中的布尔掩码是通过 'arr_one > 0' 创建的,其中 True 表示大于 0 的元素,否则为 False。nonzero() 方法然后返回掩码为 True 的索引。

2. 稀疏表示

numpy.nonzero() 函数还可以获得数组的稀疏表示。此函数对于处理具有高比例零元素的巨大数组非常有帮助。您可以只保存非零元素及其索引,而不是整个元素集。

3. 多个非零条件

借助 nonzero() 函数和布尔索引,您可以应用多个条件并检索满足这些条件的元素的索引

代码

输出

 
Indices of positive and odd elements: (array([2, 3]),)   

在本例中,布尔掩码是通过“?(arr_one > 0)?&?(arr_one % 2!= 0)? ”创建的,其中 True 表示既是奇数又是正数的元素。

4. 性能

由于 NumPy 经过优化的 C 语言实现,使用 numpy.nonzero() 通常比手动遍历数组来检测非零元素更有效,尤其是在处理大型数组时。

5. 其他应用

numpy.nonzero() 不仅可用于识别非零元素,还可用于各种其他任务,例如根据特定标准屏蔽数组、动态选择数组中的元素以及定位满足特定条件的索引。

6. 处理多维数组

numpy.nonzero() 函数能够很好地处理多维数组。当应用于多维数组时,它会返回沿每个轴独立对应的非零元素的索引。

代码

输出

 
Indices of nonzero elements in 2D array are:
(array([0, 0, 1, 1, 2, 2]), array([0, 2, 0, 1, 0, 2]))   

在此示例中,第一个数组对应于行索引,第二个数组对应于 2D 数组中非零元素的列索引。

7. 计算非零元素

通过将 numpy.nonzero() 与 'numpy.count_nonzero()' 或 'len()' 函数结合使用,您可以快速计算数组中的非零元素数量。

代码

输出

 
Number of nonzero elements: 4   

总而言之,Python 中的 NumPy 库有一个名为 numpy.nonzero() 的函数,可用于快速查找数组中非零元素的索引。它的用途广泛,包括管理多维数组、布尔索引、计算非零元素和展平索引。通过利用 numpy.nonzero(),开发人员可以改进计算工作流,加快数组操作活动,并提高数值计算应用程序的执行效率。对于任何从事数据分析、科学计算或机器学习项目的 Python 软件工程师来说,numpy.nonzero() 都是一项必不可少的工具。它可以单独使用,也可以与其他 NumPy 函数结合使用,为处理数组中的非零元素提供清晰高效的方法。