gpt4 book ai didi

python - 如果使用生成器表达式,为什么 Numpy.all() 和 any() 会给出错误的结果?

转载 作者:太空狗 更新时间:2023-10-29 20:44:00 26 4
gpt4 key购买 nike

在使用其他人的代码时,我偶然发现了这个陷阱。那么如何解释 numpy 的行为呢?

In [1]: import numpy as np

In [2]: foo = [False, False]

In [3]: print np.any(x == True for x in foo)
True # <- bad numpy!

In [4]: print np.all(x == True for x in foo)
True # <- bad numpy!

In [5]: print np.all(foo)
False # <- correct result

附注我从这里得到了列表理解代码:Check if list contains only item x

最佳答案

np.anynp.all 不适用于生成器。他们需要序列。当给定一个非序列时,他们将其视为任何其他对象并对其调用 bool(或做一些等效的事情),这将返回 True:

>>> false = [False]
>>> np.array(x for x in false)
array(<generator object <genexpr> at 0x31193c0>, dtype=object)
>>> bool(x for x in false)
True

不过,列表理解是可行的:

>>> np.all([x for x in false])
False
>>> np.any([x for x in false])
False

我建议在需要生成器时使用 Python 的内置 anyall,因为它们通常比使用 NumPy 和列表​​理解更快(因为双重转换,首先是 list,然后是 array)。

关于python - 如果使用生成器表达式,为什么 Numpy.all() 和 any() 会给出错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16334860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com