ジェネレータオブジェクトから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()
は、その出力を配列にしたいジェネレータです。ただし、配列コンストラクターはジェネレーターを反復処理せず、単にジェネレーター自体を格納します。私が望む動作はからの動作numpy.array(list(gimme()))
ですが、中間リストと最終配列を同時にメモリに持つことによるメモリのオーバーヘッドを負担したくありません。よりスペース効率の良い方法はありますか?
numpy
Pythonはないとして、それは引数として発電機を受信したときにできるわけではありません(あるいはしたくない)治療ジェネレータに、少なくとも、それは例外を発生させなければなりません。
from numpy import *; print any(False for i in range(1))
-これは組み込みをシャドウany()
し、反対の結果を生成します(私が知っているように)。