python - 为什么 Python "any()"函数可以在 numpy 数组上工作?

标签 python numpy

为什么可以直接使用 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/

相关文章:

Python scikit-learn : Cannot clone object. .. 因为构造函数似乎没有设置参数

python - 币安交割 future 历史价格

python - 网格索引和实际值之间的转换

python - 断言错误 : Wrong values for d ['w' ] | deeplearning specialization

python - 从数字元组对到所有单个数字的一​​个元组的最佳方法

python - 使用 matplotlib 绘制动态数据

python - Pandas:如何计算按 ID 分组的分类特征的出现次数

python for循环打印降序范围的多行

python - Pandas Dataframe MultiIndex 将多索引的一个级别转换到另一个轴,同时保留原始轴中的另一个级别

python - 用 BeautifulSoup 抓取表格,如何用换行符分隔元素?