मैं numpy का उपयोग करके अजगर में मानों की एक सरणी के लिए चतुर्थक की गणना करने का प्रयास कर रहा हूं।

X = [1, 1, 1, 3, 4, 5, 5, 7, 8, 9, 10, 1000]

मैं निम्नलिखित करूँगा:

quartiles = np.percentile(X, range(0, 100, 25))
quartiles
# array([1.  ,  2.5 ,  5.  ,  8.25])

लेकिन यह गलत है, क्योंकि पहला और तीसरा चतुर्थक क्रमशः 2 और 8.5 होना चाहिए।

इसे निम्नलिखित के रूप में दिखाया जा सकता है:

Q1 = np.median(X[:len(X)/2])
Q3 = np.median(X[len(X):])
Q1, Q3
# (2.0, 8.5)

एक अलग उत्तर देने के लिए np.percentile क्या कर रहा है, इसके बारे में मैं सोच नहीं पा रहा हूं। इस पर कोई प्रकाश डाला जाए, मैं इसके लिए बहुत आभारी रहूंगा।

1
S.zhen 16 मार्च 2017, 18:38

1 उत्तर

सबसे बढ़िया उत्तर

कोई सही या गलत नहीं है, लेकिन पर्सेंटाइल की गणना के बस अलग-अलग तरीके हैं। पर्सेंटाइल निरंतर मामले में एक अच्छी तरह से परिभाषित अवधारणा है, असतत नमूनों के लिए कम: विभिन्न तरीकों से बहुत बड़ी संख्या में अवलोकनों के लिए कोई फर्क नहीं पड़ेगा (की तुलना में डुप्लिकेट की संख्या), लेकिन वास्तव में छोटे नमूनों के लिए महत्वपूर्ण हो सकता है और आपको यह पता लगाने की आवश्यकता है कि मामले के आधार पर क्या अधिक समझ में आता है।

वांछित आउटपुट प्राप्त करने के लिए, आपको पर्सेंटाइल फ़ंक्शन में इंटरपोलेशन = 'मिडपॉइंट' निर्दिष्ट करना चाहिए:

quartiles = np.percentile(X, range(0, 100, 25), interpolation = 'midpoint')
quartiles    # array([ 1. ,  2. ,  5. ,  8.5])

मेरा सुझाव है कि आप दस्तावेज़ों पर एक नज़र डालें http: //docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html

2
FLab 16 मार्च 2017, 18:47
मुझे पूरा यकीन है कि मिडपॉइंट समाधान केवल तभी काम करता है जब सरणी की लंबाई विषम हो
 – 
chickensalt
28 सितंबर 2021, 10:29