ฉันจะสร้างอาร์เรย์ 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()
และสร้างผลลัพธ์ที่ตรงกันข้าม (เท่าที่ฉันรู้ตอนนี้)