Bagaimana saya bisa membangun array numpy dari objek generator?
Biarkan saya menggambarkan masalahnya:
>>> 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])
Dalam contoh ini, gimme()
adalah generator yang outputnya ingin saya ubah menjadi sebuah array. Namun, konstruktor array tidak beralih di atas generator, ia hanya menyimpan generator itu sendiri. Perilaku yang saya inginkan adalah dari numpy.array(list(gimme()))
, tetapi saya tidak ingin membayar overhead memori memiliki daftar perantara dan array terakhir dalam memori pada saat yang sama. Apakah ada cara yang lebih efisien ruang?
numpy
tidak bisa (atau tidak mau) untuk memperlakukan generator sebagai Python tidak, setidaknya harus menaikkan pengecualian ketika menerima generator sebagai argumen.
from numpy import *; print any(False for i in range(1))
- yang membayangi built-inany()
dan menghasilkan hasil sebaliknya (seperti yang saya tahu sekarang).