Làm thế nào tôi có thể xây dựng một mảng numpy ra khỏi một đối tượng máy phát điện?Làm thế nào để xây dựng một mảng numpy từ một máy phát điện?
Hãy để tôi minh họa cho 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à các máy phát điện có đầu ra tôi muốn biến thành một mảng. Tuy nhiên, các nhà xây dựng mảng không lặp qua máy phát điện, nó chỉ đơn giản là lưu trữ các máy phát điện chính nó. Các hành vi tôi mong muốn là từ numpy.array (danh sách (gimme())), nhưng tôi không muốn trả tiền chi phí bộ nhớ của việc 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 không gian?
Đây là một vấn đề thú vị. Tôi đã vượt qua điều này bằng cách 'từ nhập khẩu gumpy *; in bất kỳ (False cho i trong phạm vi (1)) '- mà bóng được xây dựng trong [' bất kỳ() '] (http://docs.python.org/library/functions.html#any) và sản xuất ngược lại kết quả (như tôi biết bây giờ). – moooeeeep
@moooeeeep thật khủng khiếp. nếu 'numpy' không thể (hoặc không muốn) để xử lý các máy phát điện như Python, ít nhất nó cũng sẽ tăng một ngoại lệ khi nó nhận một trình tạo như một đối số. – max
@max Tôi bước vào cùng một mỏ. Dường như điều này đã được nêu ra [trên danh sách NumPy] (http://thread.gmane.org/gmane.comp.python.numeric.general/47681/focus=47702) (và [trước] (http: //thread.gmane .org/gmane.comp.python.numeric.general/13197)) kết luận rằng điều này sẽ không được thay đổi để tăng ngoại lệ và người ta phải luôn sử dụng các không gian tên. – alexei