2010-08-31 19 views
12

Numpy 1.4.1 में, के हिस्टोग्राम की गणना करने का सबसे सरल या सबसे प्रभावी तरीका क्या है सरणी? numpy.histogram और pyplot.hist मास्क किए गए तत्वों को डिफ़ॉल्ट रूप से गिनें!मास्क किए गए मानों के साथ, सरणी में, सरणी के हिस्टोग्राम को कैसे बनाया जाए?

केवल सरल समाधान मैं अभी गैर नकाबपोश मूल्य के साथ एक नई सरणी बनाने शामिल है के बारे में सोच सकते हैं:

histogram(m_arr[~m_arr.mask]) 

यह नहीं बहुत ही कुशल है, हालांकि, यह अनावश्यक रूप से एक नई सरणी बनाता है के रूप में है। मुझे बेहतर विचारों के बारे में पढ़ने में खुशी होगी!

+1

इसके लायक होने के लिए, शायद इसे 'numpy.histogram' में एक बग माना जाएगा। आपको शायद एक बग रिपोर्ट दर्ज करनी चाहिए और मेलिंग सूची पर इसका उल्लेख करना चाहिए। 'Numpy.histogram' स्रोतों में 'asanyarray' के साथ' asarray' को प्रतिस्थापित करके इसे आसानी से ठीक किया जाता है। –

+0

जो, आप अपनी टिप्पणी को उत्तर के रूप में सबमिट करना चाहेंगे: अगर मैं बेवकूफ डेवलपर्स द्वारा पुष्टि की जाती है तो मैं इसे स्वीकार किए गए उत्तर के रूप में अच्छी तरह से चिह्नित कर सकता हूं। – EOL

+2

मैंने सूची में एक त्वरित प्रश्न भेजा। http://mail.scipy.org/pipermail/numpy-discussion/2010- सितंबर/052575.html हम देखेंगे कि लोग इसे एक बग मानते हैं या नहीं। ऐसा लगता है कि कम से कम मेरे लिए काउंटर सहज है। –

उत्तर

13

(ऊपर प्रति चर्चा के रूप में इस मिटाना वापस करने ...)

मुझे यकीन है कि क्या है या नहीं numpy डेवलपर्स यह एक बग या अपेक्षित व्यवहार पर विचार करेगा नहीं हूँ। मैं asked on the mailing list, तो मुझे लगता है कि हम देखेंगे कि वे क्या कहते हैं।

किसी भी तरह से, यह एक आसान फिक्स है। numpy/lib/function_base.py को का उपयोग करने के लिए numpy.asarray का उपयोग करने के लिए फ़ंक्शन में इनपुट पर इसे प्रतिलिपि बनाने के बिना मास्क किए गए सरणी (या अंडायर के किसी अन्य सबक्लास) का उचित उपयोग करने की अनुमति मिल जाएगी।

संपादित करें: ऐसा लगता है जैसे यह व्यवहार की उम्मीद है। As discussed here:

आप यह सिर्फ अतिरिक्त समारोह फोन पर है नकाबपोश डेटा की उपेक्षा करना चाहते हैं

हिस्टोग्राम (m_arr.compressed())

मैं इस तथ्य नहीं लगता है कि इस बनाता है एक है अतिरिक्त प्रति प्रासंगिक होगी, क्योंकि मुझे लगता है कि पूर्ण मास्क किए गए सरणी हिस्टोग्राम के अंदर हैंडलिंग बहुत अधिक महंगा होगा।

asanyarray का उपयोग करना भी मैट्रिक्स और अन्य उपप्रकार कि हिस्टोग्राम गणना द्वारा ठीक से समाधान नहीं हो सकता है की अनुमति होगी।

कुछ और के लिए नकाबपोश टिप्पणियों छोड़ने के अलावा, यह आवश्यक यह पता लगाने की क्या एक हिस्टोग्राम की नकाबपोश सरणी परिभाषा है के रूप में ब्रूस ने बताया होगा।

+0

धन्यवाद। हिस्टोग्राम में मास्क किए गए सरणी को संभालने के खिलाफ तर्कों में से एक यह है कि यदि हिस्टोग्राम मास्क किए गए मानों को संभाला जाता है, तो किसी को यह तय करना होगा कि वजन के मुखौटे सरणी के साथ कैसे मुखौटा डेटा का इलाज किया जाना चाहिए। मुझे नहीं लगता कि इस समस्या का कोई स्पष्ट रूप से बेहतर समाधान है: ऐसा लगता है कि 'हिस्टोग्राम()' की विशेषताएं मास्क किए गए इनपुट + वेट एरे के साथ बहुत अच्छी तरह से मिश्रण नहीं करती हैं। – EOL

7

hist(m_arr.compressed()) आज़माएं।

+1

यह मेरे 'm_arr [~ m_arr.mask]' से बेहतर विचार है। हालांकि, यह समस्या को हल नहीं करता है कि एक नई सरणी अनावश्यक रूप से सही है। – EOL

+0

पीएस: "सही" -> "बनाया गया" – EOL

2

यह एक सुपर पुराने सवाल है, लेकिन इन दिनों मैं सिर्फ का उपयोग करें:

numpy.histogram(m_arr, bins=.., range=.., density=False, weights=m_arr_mask)

कहाँ m_arr_mask m_arr रूप में एक ही आकार के साथ एक सरणी है, करने के लिए m_arr के तत्वों के लिए 0 मूल्यों से मिलकर शामिल किए जाने वाले तत्वों के लिए हिस्टोग्राम और 1 मानों से बाहर रखा जाना चाहिए।

+0

नाएन के लिए यह काम कितना अच्छा है? –

+0

इसके अलावा, यदि आप 'bins' के लिए स्ट्रिंग में पास करने का प्रयास करते हैं तो यह काम नहीं करेगा। उस से अलग जवाब। –

संबंधित मुद्दे