为什么可以直接将any
用作numpy
数组的函数?
In [30]: any(np.zeros(4))>0
Out[30]: False
我认为numpy的any()
- 方法在array
本身?
这是python
函数还是实际的numpy
方法?
答案 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
。
第一个检查数组中的任何元素是否高于零,而第二个检查结果any
(True
是否有任何元素不为零)高于零。
答案 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
,为您提供观察值。