NumPy सरणियों में तत्वों को कुशलतापूर्वक जोड़ना
Python के वैज्ञानिक कम्प्यूटिंग पारिस्थितिकी तंत्र का एक आधारशिला, NumPy, शक्तिशाली N-आयामी सरणी ऑब्जेक्ट प्रदान करता है। ये सरणियाँ मानक Python सूचियों की तुलना में महत्वपूर्ण प्रदर्शन लाभ प्रदान करती हैं, लेकिन सीधे तत्वों को जोड़ना उतना सरल या कुशल नहीं है जितना कोई उम्मीद कर सकता है। यह ट्यूटोरियल NumPy सरणियों में जोड़ने के कुशल विकल्पों का पता लगाता है।
विषयसूची
- परिचय
- सीधा जोड़ने से क्यों बचें?
- पूर्व आवंटन
- संकलन
- ऊर्ध्वाधर और क्षैतिज स्टैकिंग
- सूची बोध और सरणी निर्माण
- सही विधि चुनना
- निष्कर्ष
परिचय
NumPy सरणियाँ कुशल संख्यात्मक संचालन के लिए डिज़ाइन की गई हैं। उनका निश्चित आकार इस दक्षता में महत्वपूर्ण योगदान देता है। Python सूचियों के विपरीत, जो गतिशील रूप से आकार बदलते हैं, सूची के append()
के समान विधियों का उपयोग करके NumPy सरणी में सीधे तत्वों को जोड़ने का प्रयास करने पर एक त्रुटि होती है। ऐसा इसलिए है क्योंकि आकार बदलने के लिए पूरी तरह से नई सरणी बनाना, पुराने डेटा की प्रतिलिपि बनाना और फिर नया तत्व जोड़ना आवश्यक है – एक कम्प्यूटेशनल रूप से महंगा ऑपरेशन, विशेष रूप से बड़ी सरणियों और बार-बार जोड़ने के लिए।
सीधा जोड़ने से क्यों बचें?
NumPy सरणियों में सीधे जोड़ना अकुशल है क्योंकि इसमें बार-बार सरणी निर्माण और डेटा कॉपी करना शामिल है। इससे प्रदर्शन में महत्वपूर्ण गिरावट आती है, खासकर बड़े डेटासेट या बार-बार जोड़ने के संचालन से निपटने पर। मेमोरी आवंटन और डेटा ट्रांसफर का ओवरहेड साधारण जोड़ने के लाभ से कहीं अधिक है।
पूर्व आवंटन
सबसे कुशल तरीका अक्सर वांछित अंतिम आकार की एक सरणी को पूर्व-आवंटित करना और फिर उसे पुनरावृतिपूर्वक भरना है। यह बार-बार जोड़ने में निहित बार-बार सरणी निर्माण से बचाता है।
import numpy as np
size = 1000
arr = np.empty(size, dtype=int) # बेहतर प्रदर्शन के लिए dtype निर्दिष्ट करें
for i in range(size):
arr[i] = i * 2 # कुछ मानों से भरें
print(arr)
संकलन
numpy.concatenate
मौजूदा अक्ष के साथ मौजूदा सरणियों को कुशलतापूर्वक जोड़ता है। यह आदर्श है जब आपके पास कई सरणियाँ हैं जिन्हें आप संयोजित करना चाहते हैं।
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr_combined = np.concatenate((arr1, arr2))
print(arr_combined) # आउटपुट: [1 2 3 4 5 6]
arr3 = np.array([[1,2],[3,4]])
arr4 = np.array([[5,6],[7,8]])
arr_combined_2d = np.concatenate((arr3,arr4), axis=0) # ऊर्ध्वाधर संयोजन के लिए axis=0, क्षैतिज के लिए axis=1
print(arr_combined_2d)
ऊर्ध्वाधर और क्षैतिज स्टैकिंग
सरणियों के ऊर्ध्वाधर (पंक्ति-वार) और क्षैतिज (स्तंभ-वार) स्टैकिंग के लिए, numpy.vstack
और numpy.hstack
सुविधाजनक फ़ंक्शन प्रदान करते हैं।
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr_vstack = np.vstack((arr1, arr2)) # ऊर्ध्वाधर स्टैकिंग
arr_hstack = np.hstack((arr1, arr2)) # क्षैतिज स्टैकिंग
print("ऊर्ध्वाधर स्टैक:n", arr_vstack)
print("nक्षैतिज स्टैक:n", arr_hstack)
सूची बोध और सरणी निर्माण
पुनरावृति से सरणियाँ बनाने के लिए, numpy.array
के साथ संयुक्त सूची बोध संक्षिप्त और कुशल हो सकता है।
import numpy as np
arr = np.array([i**2 for i in range(10)])
print(arr)
सही विधि चुनना
इष्टतम विधि आपके विशिष्ट उपयोग के मामले पर निर्भर करती है:
- पूर्व आवंटन: बड़ी सरणी को क्रमिक रूप से भरने के लिए सर्वोत्तम।
concatenate
: कई मौजूदा सरणियों को जोड़ने के लिए आदर्श।vstack
/hstack
: ऊर्ध्वाधर या क्षैतिज स्टैकिंग के लिए सुविधाजनक।- सूची बोध +
numpy.array
: पुनरावृति से सरणियाँ बनाने के लिए संक्षिप्त।
निष्कर्ष
जबकि NumPy सरणियाँ Python सूचियों की तरह सीधे जोड़ने का समर्थन नहीं करती हैं, कुशल विकल्प मौजूद हैं। प्रदर्शन करने वाले संख्यात्मक कोड लिखने के लिए इन विधियों को समझना महत्वपूर्ण है। इष्टतम दक्षता के लिए जब भी संभव हो पूर्व आवंटन को प्राथमिकता दें।