Bir jeneratör nesnesinden nasıl numpy dizisi oluşturabilirim?
Sorunu açıklayayım:
>>> 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])
Bu örnekte gimme()
çıktısını diziye dönüştürmek istediğim jeneratör. Bununla birlikte, dizi yapıcısı jeneratörü tekrarlamaz, sadece jeneratörün kendisini saklar. Arzu ettiğim davranış budur numpy.array(list(gimme()))
, ancak ara liste ve aynı zamanda bellekte son diziye sahip bellek yükünü ödemek istemiyorum. Yerden daha verimli bir yol var mı?
numpy
yapamaz (ya istemiyor) bir argüman olarak bir jeneratör aldığında Python, en azından bir istisna artırmalıdır yok gibi muamele jeneratörlere.
from numpy import *; print any(False for i in range(1))
- hangi yerleşik gölgelendirirany()
ve zıt sonucu üretir (şimdi bildiğim gibi).