为什么可以直接使用 any
作为 numpy
数组上的函数?
In [30]: any(np.zeros(4))>0
Out[30]: False
我认为 numpy 的 any()
方法在 array
本身上?
这是python
函数还是实际的numpy
方法?
最佳答案
对于一维数组,它可以工作,因为内置的 Python-any
函数只需要一个可迭代的项目,该项目可以转换为 bool
(以及一个一维数组满足这些条件),但对于多维数组则不起作用:
>>> import numpy as np
>>> any(np.ones((10, 10)))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> np.any(np.ones((10, 10)))
True
这是因为,如果您迭代一个数组,您就会迭代第一个维度,如果您有一个多维数组,您将在每次迭代中获得一个数组
(不是数字)。这些array
无法转换为bool
。所以它抛出异常。
但是 np.any
在数组上比 any
更快(在大多数情况下),因为它知道输入类型(array
)并且它可以避免 any
需要的 python 迭代:
In [0]: arr = np.zeros((1000))
In [1]: %timeit any(arr)
Out[1]: 215 µs ± 4.29 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [2]: %timeit np.any(arr)
Out[2]: 31.2 µs ± 1.41 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
顺便说一句,您可能想使用 any(np.zeros(4) > 0)
而不是 any(np.zeros(4))>0
。
第一个检查数组中是否有任何元素大于零,而第二个检查是否 any
的结果(如果任何元素不大于 True
零)大于零。
关于python - 为什么 Python "any()"函数可以在 numpy 数组上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44423246/