Làm thế nào tôi có thể xây dựng một mảng numpy từ một đối tượng máy phát điện?
Hãy để tôi minh họa vấn đề:
>>> 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])
Trong trường hợp này, gimme()
là trình tạo có đầu ra mà tôi muốn biến thành một mảng. Tuy nhiên, hàm tạo mảng không lặp qua trình tạo, nó chỉ đơn giản là lưu trữ chính trình tạo. Hành vi tôi mong muốn là từ đó numpy.array(list(gimme()))
, nhưng tôi không muốn trả chi phí bộ nhớ khi có danh sách trung gian và mảng cuối cùng trong bộ nhớ cùng một lúc. Có cách nào hiệu quả hơn về không gian?
numpy
không thể (hoặc không muốn) đối xử với các trình tạo như Python, thì ít nhất nó sẽ đưa ra một ngoại lệ khi nhận được một trình tạo như một đối số.
from numpy import *; print any(False for i in range(1))
- làm mờ phần tích hợpany()
và tạo ra kết quả ngược lại (như tôi biết bây giờ).