Numpy.histogram () कैसे काम करता है?


120

सुन्न पर पढ़ते हुए, मैंने समारोह का सामना किया numpy.histogram()

यह किस लिए है और यह कैसे काम करता है? डॉक्स में वे डिब्बे का उल्लेख करते हैं: वे क्या हैं?

कुछ googling ने मुझे सामान्य रूप से हिस्टोग्राम की परिभाषा में ले लिया । मै समझ गया। लेकिन दुर्भाग्य से मैं इस ज्ञान को डॉक्स में दिए गए उदाहरणों से नहीं जोड़ सकता।

जवाबों:


167

एक बिन सीमा है जो एक्स-अक्ष के साथ हिस्टोग्राम के एक बार की चौड़ाई का प्रतिनिधित्व करती है। आप इसे अंतराल भी कह सकते हैं। (विकिपीडिया उन्हें और अधिक औपचारिक रूप से "असंतुष्ट श्रेणियों" के रूप में परिभाषित करता है।)

Numpy histogramफ़ंक्शन हिस्टोग्राम को आकर्षित नहीं करता है, लेकिन यह प्रत्येक बिन के भीतर आने वाले इनपुट डेटा की घटनाओं की गणना करता है, जो प्रत्येक पट्टी के क्षेत्र को निर्धारित करता है (जरूरी नहीं कि ऊंचाई समान चौड़ाई की नहीं हो)।

इस उदाहरण में:

 np.histogram([1, 2, 1], bins=[0, 1, 2, 3])

क्रमशः 0 से 1 (excl 1.), 1 से 2 (excl। 2) और 2 से 3 (incl। 3) के मानों के लिए 3 डिब्बे हैं। अगर [0, 1, 2, 3]इस उदाहरण में डेल्पी ( ) की सूची देकर नम्पी इन डिब्बे को परिभाषित करती है , हालांकि यह परिणामों में डिब्बे भी लौटाता है, क्योंकि यह इनपुट से स्वचालित रूप से उन्हें चुन सकता है, यदि कोई भी निर्दिष्ट नहीं है। यदि bins=5, उदाहरण के लिए, यह न्यूनतम इनपुट मूल्य और अधिकतम इनपुट मूल्य के बीच फैले हुए समान चौड़ाई के 5 डिब्बे का उपयोग करेगा।

इनपुट मान 1, 2 और 1 हैं। इसलिए, बिन "1 से 2" में दो घटनाएँ (दो 1मूल्य) होते हैं, और बिन "2 से 3" में एक घटना ( 2) होती है। ये परिणाम लौटे हुए टपल में पहले आइटम में हैं array([0, 2, 1]):।

चूंकि यहां डिब्बे समान चौड़ाई के हैं, इसलिए आप प्रत्येक बार की ऊंचाई के लिए घटनाओं की संख्या का उपयोग कर सकते हैं। तैयार होने पर, आपके पास होगा:

  • एक्स-अक्ष पर रेंज / बिन [0,1] के लिए ऊंचाई की एक पट्टी,
  • रेंज / बिन [1,2] के लिए ऊंचाई 2 की एक पट्टी,
  • रेंज / बिन [2,3] के लिए ऊंचाई 1 की एक पट्टी।

आप इसे सीधे Matplotlib के साथ प्लॉट कर सकते हैं (इसका histकार्य डिब्बे और मान भी लौटाता है):

>>> import matplotlib.pyplot as plt
>>> plt.hist([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]), <a list of 3 Patch objects>)
>>> plt.show()

यहां छवि विवरण दर्ज करें


8
यदि आप उन्हें प्लॉट करना चाहते हैं तो आपको इस जवाब में भी दिलचस्पी हो सकती है। माटप्लोटलिब उन्हें सीधे गणना भी कर सकते हैंयहाँ और यहाँ उदाहरण देखें ।
ब्रूनो

आईरिस फूलों के डेटासेट में, काउंट्स, बिन_एजेस = एनपी.हिस्टोग्राम (आईरिस_सेटोसा ['पेटल_लॉग्स'], डिब्बे = 10, घनत्व = सच) मुझे अस्थायी मूल्यों में मेरी गिनती देता है, उदाहरण के अनुसार आपने जो गिनती की है वह कैसे हो सकती है। अस्थायी मान?
दीपेन गज्जर

सर्वश्रेष्ठ उत्तर को ध्यान में रखना चाहिए कि सबसे बड़ी दाएं किनारे से ऊपर महत्वपूर्ण मूल्यों की अनदेखी की जाएगी। हमेशा ग्रेट्स किनारे के ऊपर के मानों को अंतिम बिन में जोड़ें या अंतिम रूप से बनाए गए binsमान में अधिकतम मान में बदलें ।
ए .मेटोव

@DipenGajjar यदि आप "घनत्व = सत्य" का लोप करते हैं, तो आप वह नहीं देखेंगे। घनत्व कीवर्ड आपको एक "सामान्यीकृत" हिस्टोग्राम देता है जिसमें संभावना घनत्व फ़ंक्शन का प्रतिनिधित्व किया जाता है। आप इसके बारे में यहां पढ़ सकते हैं ।
BUFU

67
import numpy as np    
hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3], bins = range(5))

नीचे, histइंगित करता है कि बिन # 0 में 2 आइटम हैं, बिन # 1 में 2, बिन # 3 में 4, बिन # 4 में 1।

print(hist)
# array([0, 2, 4, 1])   

bin_edges इंगित करता है कि बिन # 0 अंतराल है [0,1), बिन # 1 है [1,2), ..., बिन # 3 है [3,4)।

print (bin_edges)
# array([0, 1, 2, 3, 4]))  

उपरोक्त कोड के साथ खेलें, इनपुट को बदलें np.histogramऔर देखें कि यह कैसे काम करता है।


लेकिन एक तस्वीर एक हजार शब्दों के लायक है:

import matplotlib.pyplot as plt
plt.bar(bin_edges[:-1], hist, width = 1)
plt.xlim(min(bin_edges), max(bin_edges))
plt.show()   

यहां छवि विवरण दर्ज करें


4
मुझे लगता है कि यह अधिक सटीक होगा: plt.bar(bin_edges[:-1], hist, width=1)और plt.xlim(min(bin_edges), max(bin_edges)), सलाखों को उनकी अपेक्षित चौड़ाई के लायक बनाने के लिए (अन्यथा, बीच में कोई मान के साथ एक छोटा बिन हो सकता है)।
ब्रूनो

क्या "plt.hist (...)" फ़ंक्शन में उपर्युक्त संख्यात्मक प्रारूप में प्राप्त "हिस्ट" का उपयोग करना संभव है? क्योंकि बार विधि में, आप इसे "y" के रूप में सप्लाई करते हैं, जबकि यहाँ hist में, केवल x है ..
kbg

7

एक और उपयोगी बात यह है numpy.histogramकि आउटपुट को प्लॉट करना है क्योंकि x और y एक लाइनग्राफ पर निर्देशांक करते हैं। उदाहरण के लिए:

arr = np.random.randint(1, 51, 500)
y, x = np.histogram(arr, bins=np.arange(51))
fig, ax = plt.subplots()
ax.plot(x[:-1], y)
fig.show()

यहां छवि विवरण दर्ज करें

यह हिस्टोग्राम की कल्पना करने का एक उपयोगी तरीका हो सकता है, जहां आप हर जगह सलाखों के बिना उच्च स्तर की ग्रैन्युलैरिटी पसंद करेंगे। चरम पिक्सेल मूल्यों की पहचान के लिए छवि हिस्टोग्राम में बहुत उपयोगी है।


यह छवि पंक्ति और स्तंभ अनुमानों को देखने के लिए काफी उपयोगी है।
SKR
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.