ValueError: arrays must all be the same length
यह त्रुटि पाइथन में संख्यात्मक डेटा के साथ काम करते समय, विशेष रूप से NumPy जैसे पुस्तकालयों के साथ, एक सामान्य समस्या है। यह त्रुटि तब आती है जब आप ऐसे सरणियों (या सरणियों की तरह व्यवहार करने वाली सूचियों) पर संक्रिया करने का प्रयास करते हैं जिनमें तत्वों की संख्या असंगत होती है। यह मार्गदर्शिका इस समस्या को हल करने के विभिन्न समाधानों का पता लगाती है, स्पष्टता और सर्वोत्तम प्रथाओं पर ध्यान केंद्रित करती है।
विषयवस्तु की तालिका
- त्रुटि को समझना
- विधि 1: असमान लंबाई को कुशलतापूर्वक संभालना
- विधि 2: NumPy के साथ पैडिंग
- विधि 3: DataFrames के लिए Pandas का लाभ उठाना
- विधि 4: सरल मामलों के लिए सूची बोध
- उन्नत विचार
- निष्कर्ष
त्रुटि को समझना
कई सरणी संक्रियाएँ (जोड़, संयोजन, प्लॉटिंग, आदि) को सुसंगत आयामों की आवश्यकता होती है। यदि आप अलग-अलग लंबाई के दो सरणियों को जोड़ने का प्रयास करते हैं, तो संक्रिया अपरिभाषित है। पाइथन इस असंगति को इंगित करने के लिए ValueError
उत्पन्न करता है। यह त्रुटि अक्सर उपयोग करते समय दिखाई देती है:
- NumPy सरणी फलन (
np.concatenate
,np.vstack
,np.hstack
, तत्व-वार अंकगणित) - प्लॉटिंग पुस्तकालय (Matplotlib, Seaborn)
- मशीन लर्निंग एल्गोरिदम (जिन्हें सुसंगत फीचर आयामों की आवश्यकता होती है)
विधि 1: असमान लंबाई को कुशलतापूर्वक संभालना
सबसे मजबूत दृष्टिकोण आपके डेटा और लक्ष्यों पर निर्भर करता है। अक्सर, सबसे छोटा सरणी संक्रिया के लिए लंबाई निर्धारित करता है। ट्रिमिंग के बजाय, संक्रिया से *पहले* सुसंगत लंबाई सुनिश्चित करने के लिए फ़िल्टरिंग पर विचार करें:
import numpy as np
array1 = np.array([1, 2, 3, 4, 5])
array2 = np.array([6, 7, 8])
# न्यूनतम लंबाई निर्धारित करें
min_len = min(len(array1), len(array2))
# केवल पहले min_len तत्वों के साथ नए सरणी बनाएँ
array1_new = array1[:min_len]
array2_new = array2[:min_len]
#अपनी संक्रिया करें।
result = array1_new + array2_new
print(result) # आउटपुट: [ 7 9 11]
यह विधि डेटा हानि से बचाता है और आम तौर पर साधारण ट्रिमिंग के लिए पसंद किया जाता है।
विधि 2: NumPy के साथ पैडिंग
यदि आपको सभी डेटा को बनाए रखने की आवश्यकता है, तो सबसे लंबे वाले के मिलान के लिए छोटे सरणियों को पैड करें। NumPy का np.pad
पैडिंग विधियों पर नियंत्रण प्रदान करता है:
import numpy as np
array1 = np.array([1, 2, 3, 4, 5])
array2 = np.array([6, 7, 8])
max_length = max(len(array1), len(array2))
array2_padded = np.pad(array2, (0, max_length - len(array2)), 'constant', constant_values=0) #शून्यों से पैड करें
print(array2_padded) # आउटपुट: [6 7 8 0 0]
result = array1 + array2_padded
print(result) # आउटपुट: [ 7 9 11 4 5]
संदर्भ के आधार पर, आप ‘constant’, ‘edge’, ‘linear_ramp’, आदि चुन सकते हैं।
विधि 3: DataFrames के लिए Pandas का लाभ उठाना
Pandas सारणीबद्ध डेटा के साथ उत्कृष्टता प्राप्त करता है, असमान लंबाई को इनायत से संभालता है। यह लापता मानों को NaN
से भरता है:
import pandas as pd
import numpy as np
array1 = np.array([1, 2, 3, 4, 5])
array2 = np.array([6, 7, 8])
df = pd.DataFrame({'col1': array1, 'col2': array2})
print(df)
# आउटपुट:
# col1 col2
# 0 1 6.0
# 1 2 7.0
# 2 3 8.0
# 3 4 NaN
# 4 5 NaN
Pandas फलन NaN
मानों को उचित रूप से संभालते हैं, अक्सर गणनाओं में उन्हें अनदेखा करते हैं या प्रतिस्थापन के लिए विकल्प प्रदान करते हैं।
विधि 4: सरल मामलों के लिए सूची बोध
सूचियों और बुनियादी संक्रियाओं के साथ सरल परिदृश्यों के लिए, सूची बोध संक्षिप्त हो सकता है:
list1 = [1, 2, 3]
list2 = [4, 5, 6, 7]
min_len = min(len(list1), len(list2))
result = [x + y for x, y in zip(list1[:min_len], list2[:min_len])]
print(result) # आउटपुट: [5, 7, 9]
यह दृष्टिकोण छोटे डेटासेट के लिए पठनीय है लेकिन बड़े सरणियों के लिए NumPy की तुलना में कम कुशल है।
उन्नत विचार
बहु-आयामी सरणियों या अधिक जटिल परिदृश्यों के लिए, इन बिंदुओं पर विचार करें:
- आकार बदलना: यदि आवश्यक हो तो संक्रियाओं से पहले सरणी आयामों को समायोजित करने के लिए
np.reshape
का उपयोग करें। - प्रसारण: NumPy के प्रसारण नियम कुछ शर्तों के तहत विभिन्न आकारों के सरणियों पर संक्रियाओं की अनुमति देते हैं। इन नियमों को समझने से आपका कोड सरल हो सकता है।
- डेटा सफाई: सरणी संक्रियाओं से पहले, सुनिश्चित करें कि आपका डेटा स्वच्छ और सुसंगत है। लापता मानों या बाहरी मानों को उचित रूप से संबोधित करें।
निष्कर्ष
“सरणियों की लंबाई समान होनी चाहिए” त्रुटि को अक्सर आपके डेटा और परिचालन लक्ष्यों के आधार पर सही दृष्टिकोण चुनकर हल किया जा सकता है। बेहतर कोड और विश्वसनीयता के लिए फ़िल्टरिंग और Pandas DataFrames जैसी कुशल और मजबूत विधियों को प्राथमिकता दें।