मैं जनरेटर ऑब्जेक्ट से एक numpy सरणी कैसे बना सकता हूं?मैं जनरेटर से एक 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])
इस उदाहरण में, गिम्मी() जनरेटर जिसका उत्पादन मैं एक सरणी में बदलने के लिए चाहते हैं। हालांकि, सरणी कन्स्ट्रक्टर जनरेटर पर पुनरावृत्ति नहीं करता है, यह बस जनरेटर को ही स्टोर करता है। मेरा इच्छित व्यवहार यह है कि numpy.array (सूची (gimme()) से), लेकिन मैं एक ही समय में इंटरमीडिएट सूची और अंतिम सरणी को स्मृति में रखने के मेमोरी ओवरहेड का भुगतान नहीं करना चाहता हूं। क्या कोई और जगह-कुशल तरीका है?
यह एक दिलचस्प मुद्दा है। मैं 'numpy आयात * से' इस पर आया; किसी भी प्रिंट करें (रेंज के लिए झूठी (1)) '- जो अंतर्निहित ['any()'] (http://docs.python.org/library/functions.html#any) छाया करता है और इसके विपरीत बनाता है नतीजा (जैसा कि अब मुझे पता है)। – moooeeeep
@moooeeeep यह भयानक है। यदि जनरेटर के रूप में जेनरेटर का इलाज करने के लिए 'numpy' नहीं (या नहीं करना चाहता), कम से कम इसे एक अपवाद उठाया जाना चाहिए जब इसे जनरेटर को तर्क के रूप में प्राप्त किया जाए। – max
@ मैक्स मैं सटीक उसी खान पर कदम रखा। जाहिर है यह [NumPy सूची पर] उठाया गया था (http://thread.gmane.org/gmane.comp.python.numeric.general/47681/focus=47702) (और [पहले] (http: //thread.gmane .org/gmane.comp.python.numeric.general/13197)) निष्कर्ष निकाला है कि यह अपवाद बढ़ाने के लिए नहीं बदला जाएगा और किसी को हमेशा नामस्थान का उपयोग करना चाहिए। – alexei