如何从生成器对象构建numpy数组?
让我说明一下这个问题:
>>> import numpy
>>> def gimme():
... for x in xrange(10):
... yield x
...
>>> gimme()
<generator object at 0x28a1758>
>>> list(gimme())
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> numpy.array(xrange(10))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> numpy.array(gimme())
array(<generator object at 0x28a1758>, dtype=object)
>>> numpy.array(list(gimme()))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
在这种情况下,gimme()
是我想将其输出转换为数组的生成器。但是,数组构造函数不会迭代生成器,它只是存储生成器本身。我想要的行为是from的numpy.array(list(gimme()))
,但是我不想支付同时拥有中间列表和最终数组的内存开销。有没有更节省空间的方法?
numpy
不能(或不想)像Python那样对待生成器,则至少在接收到生成器作为参数时,它应该引发异常。
from numpy import *; print any(False for i in range(1))
-遮盖了内置的东西any()
并产生了相反的结果(如我现在所知)。