यदि आप numpy का उपयोग कर रहे हैं, मौके से, numpy ऑब्जेक्ट सरणी "स्मृति में पॉइंटर्स के निरंतर सरणी" हैं।
हालांकि, वे NumPy सरणी के सामान्य उद्देश्य विफल, और अक्सर हाथ में समस्या के लिए एक बुरा जवाब ...
(एक ही प्रकार के सन्निहित स्मृति जा रहा है हवा - पूरे पर> तेजी से गणना सरणी ... ऑब्जेक्ट एरे इस की अनुमति नहीं देते हैं, क्योंकि वे पॉइथन ऑब्जेक्ट्स के पॉइंटर्स के सरणी हैं।)।
फिर भी, np.empty((m,n), dtype=np.object)
जो आप चाहते हैं वह करता है।
उदा।
x = np.empty((3,4), dtype=np.object)
print x
x[2,3] = range(5)
x[1,2] = 2
x[1,3] = (item*2 for item in xrange(10))
print x
पैदावार कौन सा:
Initial array:
[[None None None None]
[None None None None]
[None None None None]]
Modified array:
[[None None None None]
[None None 2 <generator object <genexpr> at 0x8700d9c>]
[None None None [0, 1, 2, 3, 4]]]
बस ध्यान रखें कि यह बहुत धीमी होने के लिए जा रहा है हो सकता है और "सामान्य" NumPy सरणी से काफी कम स्मृति कुशल! (यानी एक None
ऑब्जेक्ट भी एक (numpy, python) फ्लोट की तुलना में काफी मेमोरी लेता है, और आपको सरणी में संग्रहीत पॉइंटर का अतिरिक्त ओवरहेड मिला है। एक बड़ी ऑब्जेक्ट सरणी बहुत मेमोरी का उपयोग करेगी!)
हालांकि, यदि आपको जो चाहिए वह प्रभावी रूप से एक बहु-आयामी सूची है, और आप इसे जोड़ने या उसके आकार को अक्सर बदलने के लिए नहीं जा रहे हैं, तो उन्हें सुविधाजनक रूप से शापित किया जा सकता है। वे अनिवार्य रूप से मैटलैब के सेल सरणी के बराबर होने के लिए हैं, और जबकि पाइथन (पायथन की सूचियां हैं) में उस तरह की डेटा संरचना की आवश्यकता कम है, कभी-कभी यह आसान है!
जैसा कि पहले कहा गया है, यह ऐसा विचार नहीं है जिसे आप करना चाहते हैं। कार्य करें जो आप करना चाहते हैं (और हमें बताएं) और हम इसके लिए डेटा संरचना को परिभाषित करने में आपकी सहायता करेंगे। लेकिन पाइथन के बारे में महान चीजों में से एक यह है कि आपको सी – katrielalex