python代码,如何理解numpy.any()以及ndarray.any()函数?
发布于 作者:苏南大叔 来源:程序如此灵动~

基于python
自带的的any()
函数,如何理解numpy
中的.any()
函数呢?这就是本文要阐述的问题。具体的来说,本文要对ndarray
类型的变量,实现.any()
操作,即判断其元素是否存在True
。但是,基于ndarray
类型的.any()
操作是比较复杂的。本文也仅仅会对其做简要的描述,后续的高级参数部分,如果用得到,再写文章展开更深层次的描述。

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码经验总结。本文测试环境:win10
,python@3.11.0
,numpy@1.24.2
。
前文回顾
python
自带的any()
和all()
,是前文回顾的主要内容。这两个函数比较朴华无实,靠谱。参考文章:
- https://newsn.net/say/python-any.html
- https://newsn.net/say/python-any.html
- https://newsn.net/say/ndarray-flatten.html
但是,any()
这个概念移植到numpy
这边,就比较复杂了。有两个效果完全一样的分支。比如:
np.any(_ndarray)
_ndarray.any()
本文【重点】结论
np.any(np.array)
,其逻辑本质是对矩阵所有元素做【或】运算,存在True
则返回True
,不返回True
的时候,也不一定返回False
。请对比下面的实验结果,反复理解这句话。
- 非零数字被理解为
True
。 - 返回的是传统的
True
和其它(不一定是False
)。 - 可能会各种报错,特别是元素中出现字符串的时候。
- 算法上,可能是
logic_or
,并不是循环出某个元素,然后做个判断。所以,碰到一些无法执行or
操作的对象,就会报错。
函数原型
函数原型:
对于二维数组来说,可以添加新的参数axis
,来规定统计的范围。
axis=0
,就是普通最常见的做账单的方式(比如超市小票),效果是从上到下,以列为单位。axis=1
,效果是从左到右,以行为单位。
参考文章:
对于其它参数,因为实在是用不到,这里暂作伏笔。
基础测试例子
稍稍复杂的例子
这里的代码的返回值,就不局限于True
了,可能是False
,也可能是其它。
主要看最后一个例子,返回值不是true
,目前理解就是:它们可能都被当成空值。

空数组
在空ndarray
里面寻找为True
的元素,没有找到,返回False
。
结束语
苏南大叔个人觉得,numpy
目前的any()
操作中,一些报错报的挺莫名其妙的。估计,后续numpy
升级中,会对这部分逻辑进行更好的修复。


