numpy all
中出现这种奇怪的原因是什么?
>>> import numpy as np
>>> np.all(xrange(10))
False
>>> np.all(i for i in xrange(10))
True
答案 0 :(得分:7)
Numpy.all不了解生成器表达式。
来自文档
numpy.all(a, axis=None, out=None)
Test whether all array elements along a given axis evaluate to True.
Parameters :
a : array_like
Input array or object that can be converted to an array.
好的,不是很明确,所以让我们看一下代码
def all(a,axis=None, out=None):
try:
all = a.all
except AttributeError:
return _wrapit(a, 'all', axis, out)
return all(axis, out)
def _wrapit(obj, method, *args, **kwds):
try:
wrap = obj.__array_wrap__
except AttributeError:
wrap = None
result = getattr(asarray(obj),method)(*args, **kwds)
if wrap:
if not isinstance(result, mu.ndarray):
result = asarray(result)
result = wrap(result)
return result
由于生成器表达式没有all
方法,因此最终调用_wrapit
在_wrapit
中,它首先检查__array_wrap__
方法generates AttributeError
最终在生成器表达式上调用asarray
来自numpy.asarray
numpy.asarray(a, dtype=None, order=None)
Convert the input to an array.
Parameters :
a : array_like
Input data, in any form that can be converted to an array. This includes lists, lists of tuples, tuples, tuples of tuples, tuples of lists and ndarrays.
有关各种类型的输入数据的详细记录,这些输入数据绝对不是生成器表达式
最后,尝试
>>> np.asarray(0 for i in range(10))
array(<generator object <genexpr> at 0x42740828>, dtype=object)
答案 1 :(得分:0)
奇怪。当我尝试时,我得到:
>>> np.all(i for i in xrange(10))
<generator object <genexpr> at 0x7f6e04c64500>
嗯。
我不认为numpy understands generator expressions。尝试使用列表理解,你得到这个:
>>> np.all([i for i in xrange(10)])
False