मैं एक जनरेटर ऑब्जेक्ट से बाहर एक संख्यात्मक सरणी कैसे बना सकता हूं?
मुझे समस्या के बारे में बताएं:
>>> 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
पाइथन के रूप में जनरेटर का इलाज (या नहीं करना चाहता) कर सकता है, तो कम से कम इसे एक अपवाद के रूप में उठाया जाना चाहिए जब यह एक तर्क के रूप में जनरेटर प्राप्त करता है।
from numpy import *; print any(False for i in range(1))
- जो बिल्ट-इन छाया देता हैany()
और विपरीत परिणाम उत्पन्न करता है (जैसा कि मैं अब जानता हूं)।