2012-05-23 31 views
10

में हार्मोनिक माध्य पाइथन (scipy.stats.hmean) में हार्मोनिक मीन फ़ंक्शन के लिए आवश्यक है कि इनपुट सकारात्मक संख्या हो।पाइथन

उदाहरण के लिए:

from scipy import stats 
print stats.hmean([ -50.2 , 100.5 ]) 

परिणामों में:

ValueError: Harmonic mean only defined if all elements greater than zero 

मैं गणितीय नहीं दिख रहा है यही कारण है कि इस मामले होना चाहिए, दुर्लभ उदाहरण है जहाँ आप शून्य से भाग देने अंत होगा के अलावा । शून्य से विभाजित करने के बजाय, hmean() तब किसी भी सकारात्मक संख्या को इनपुट करने पर एक त्रुटि फेंकता है, भले ही हार्मोनिक माध्य पाया जा सके या नहीं।

क्या मुझे यहां गणित में कुछ याद आ रही है? या यह वास्तव में SciPy में एक सीमा है?

आप संख्याओं के सेट के हार्मोनिक माध्य को खोजने के बारे में कैसे जाएंगे जो कि पाइथन में सकारात्मक या नकारात्मक हो सकता है?

+3

"मैं गणितीय रूप से नहीं देखता कि यह मामला क्यों होना चाहिए ..." तो आप मूल रूप से एक गणित प्रश्न है, प्रोग्रामिंग प्रश्न नहीं। –

+0

.. और एक गणित प्रश्न जिसका स्पष्ट रूप से उत्तर दिया गया है, क्योंकि हार्मोनिक माध्य केवल सकारात्मक संख्याओं के लिए समझ में आता है। –

उत्तर

21

हरात्मक माध्य केवल परिभाषित किया गया है सकारात्मक वास्तविक संख्या के सेट के लिए। यदि आप इसे नकारात्मक के साथ सेट के लिए प्रयास करते हैं और गणना करते हैं तो आपको सभी प्रकार के अजीब और बेकार परिणाम मिलते हैं, भले ही आप 0 से div को हिट न करें। उदाहरण के लिए, सेट (3, -3, 4) में सूत्र लागू करना मतलब है 12 में से!

+0

+1 अच्छा जवाब। ऋणात्मक संख्या denominator कम हो जाती है, जो परिणाम को फुलाता है। – Akavall

+1

क्यों हार्मोनिक मतलब नकारात्मक संख्याओं के लिए बिल्कुल कोई समझ नहीं आता है की अच्छी व्याख्या। –

+0

फैक्टोरियल (12) ??? ;-) – dpb

8

तुम बस का उपयोग कर सकते हरात्मक माध्य परिभाषित समीकरण:

len(a)/np.sum(1.0/a) 

लेकिन, विकिपीडिया का कहना है कि हरात्मक माध्य सकारात्मक वास्तविक संख्या परिभाषित किया गया है:

http://en.wikipedia.org/wiki/Harmonic_mean

1

हार्मोनिक माध्य की गणितीय परिभाषा नकारात्मक अनुप्रयोगों को अनुप्रयोगों को प्रतिबंधित नहीं करती है (हालांकि आप +1 और -1 के हार्मोनिक माध्य की गणना नहीं करना चाहेंगे), हालांकि, यह अनुपात जैसे अनुपात के लिए गणना करने के लिए डिज़ाइन किया गया है ताकि यह प्रत्येक डेटा बिंदु के बराबर वजन देगा, जबकि अंकगणितीय अर्थों में या चरम डेटा बिंदुओं के अनुपात में बहुत अधिक वजन प्राप्त होगा और इस प्रकार अवांछित होगा।

तो आप या तो @HYRY सुझाए गए परिभाषा को हार्डकोड करने का प्रयास कर सकते हैं, या गलत संदर्भ में हार्मोनिक माध्य लागू कर सकते हैं।

1

एक आंकड़े पुस्तकालय आप अजगर> = 3.6 उपयोग कर रहे हैं नहीं है:

https://docs.python.org/3/library/statistics.html

आप इस तरह अपने मतलब विधि का उपयोग कर सकते हैं। मान लीजिए कि आप संख्या जिनमें से आप मतलब पता लगाना चाहते हैं की एक सूची है दो:

list = [11, 13, 12, 15, 17] 
import statistics as s 
s.harmonic_mean(list) 

यह बहुत stdev, विचरण, मोड, माध्य, मध्यिका आदि जो भी उपयोगी होते हैं जैसे अन्य तरीकों है।