为什么Pythons“any()”函数在numpy数组上有效?

时间:2017-06-07 21:41:06

标签: python numpy

为什么可以直接将any用作numpy数组的函数?

In [30]: any(np.zeros(4))>0
Out[30]: False

我认为numpy的any() - 方法在array本身?

这是python函数还是实际的numpy方法?

2 个答案:

答案 0 :(得分:3)

对于一维数组,它是有效的,因为内置的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(而不是一个数字)。这些array无法转换为bool。所以它抛出异常。

但是np.any在数组上比any更快(因为它知道输入类型(array),它可以避免any的python迭代1}}需要:

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

第一个检查数组中的任何元素是否高于零,而第二个检查结果anyTrue是否有任何元素为零)高于零。

答案 1 :(得分:2)

.menu { position absolute; background: white; height: 65px; } .menu.sticky { position:fixed; height: 37px; max-width: 480px; padding: 0; background: white; } 数组是可迭代的,这是其参数的所有内置期望值。如果可迭代的所有元素都是假的,则numpy返回any,所有的零都是。然后,比较any也是False,为您提供观察值。