和其他人的代码一起工作,我偶然发现了这个问题.那么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
Run Code Online (Sandbox Code Playgroud)
ps我从这里得到了列表理解代码:检查列表是否只包含项目x
Fre*_*Foo 15
np.any并且np.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
Run Code Online (Sandbox Code Playgroud)
列表推导工作,但:
>>> np.all([x for x in false])
False
>>> np.any([x for x in false])
False
Run Code Online (Sandbox Code Playgroud)
我建议使用Python的内置any和all预期发电机时,因为它们通常速度比使用与NumPy和列表理解(因为双转换,先list,然后去array).
| 归档时间: |
|
| 查看次数: |
5827 次 |
| 最近记录: |