আমি কীভাবে জেনারেটরের অবজেক্টের বাইরে আঙ্কুল অ্যারে তৈরি করতে পারি?
আমাকে সমস্যাটি বর্ণনা করি:
>>> 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()
এবং বিপরীত ফলাফল তৈরি করে (যেমনটি আমি এখন জানি)।