pthon NumPy में np.mean () बनाम np.aiture ()?


191

मुझे लगता है कि

In [30]: np.mean([1, 2, 3])
Out[30]: 2.0

In [31]: np.average([1, 2, 3])
Out[31]: 2.0

हालांकि, कुछ अंतर होने चाहिए, क्योंकि आखिरकार वे दो अलग-अलग कार्य हैं।

उनके बीच क्या अंतर हैं?


20
वास्तव में, प्रलेखन इसे तुरंत स्पष्ट नहीं करता है, जहां तक ​​मैं देख सकता हूं। यह कह पाना असंभव नहीं है, लेकिन मुझे लगता है कि यह सवाल स्टैक ओवरफ्लो के लिए समान है।
ब्लैकविजेबल

1
numpy.mean: सरणी तत्वों का औसत लौटाता है।
जौक्विन

@joaquin: "निर्दिष्ट अक्ष के साथ अंकगणितीय माध्य की गणना करें।" बनाम "निर्दिष्ट अक्ष के साथ भारित औसत की गणना करें।"
ब्लेंडर

@ ब्लेंडर सही है। मैं सिर्फ आपकी टिप्पणी पर एक तरह की मजेदार प्रतिक्रिया करने की कोशिश कर रहा था क्योंकि अगर मैं आपके निर्देशों का पालन करता हूं तो पहली बात जो मैंने dpy में पढ़ी है numpy.mean के लिए सुन्न है। अरन तत्वों के औसत को लौटाता है जो यदि आप हैं तो हास्यास्पद है ओपी सवाल का जवाब तलाश रहे हैं।
जौक्विन

जवाबों:


181

np.aiture एक वैकल्पिक वजन पैरामीटर लेता है। यदि इसकी आपूर्ति नहीं की जाती है तो वे समान हैं। स्रोत कोड पर एक नज़र डालें: औसत , औसत

np.mean:

try:
    mean = a.mean
except AttributeError:
    return _wrapit(a, 'mean', axis, dtype, out)
return mean(axis, dtype, out)

np.average:

...
if weights is None :
    avg = a.mean(axis)
    scl = avg.dtype.type(a.size/avg.size)
else:
    #code that does weighted mean here

if returned: #returned is another optional argument
    scl = np.multiply(avg, 0) + scl
    return avg, scl
else:
    return avg
...

60
वे दो अलग-अलग कार्य क्यों प्रदान करते हैं? लगता है कि वे बस की पेशकश करनी चाहिए np.averageके बाद से weightsपहले से ही वैकल्पिक है। अनावश्यक लगता है और केवल उपयोगकर्ताओं को भ्रमित करने का कार्य करता है।
ज्यॉफ

6
@Geoff मैं उन्हें "औसत" के लिए एक NotImplementedException फेंकना होगा, उपयोगकर्ताओं को शिक्षित करने के लिए कि अंकगणित का मतलब "औसत" के समान नहीं है।
FooBar

26

np.mean हमेशा एक अंकगणितीय माध्य की गणना करता है, और इसमें इनपुट और आउटपुट के लिए कुछ अतिरिक्त विकल्प होते हैं (जैसे कि क्या डेटाटाइप का उपयोग करना है, जहां परिणाम प्राप्त करना है)।

np.averageयदि weightsपैरामीटर की आपूर्ति की जाती है तो भारित औसत की गणना कर सकते हैं ।


25

सुन्न के कुछ संस्करण में एक और महत्वपूर्ण अंतर है जो आपको पता होना चाहिए:

average खाते के मुखौटे में न लें, इसलिए डेटा के पूरे सेट पर औसत की गणना करें।

mean खाता मुखौटे में ले जाता है, इसलिए केवल बिना मान वाले मूल्यों पर गणना करें।

g = [1,2,3,55,66,77]
f = np.ma.masked_greater(g,5)

np.average(f)
Out: 34.0

np.mean(f)
Out: 2.0

1
नोट: np.ma.averageकाम करता है। इसके अलावा, एक बग रिपोर्ट है
नील जी

2

आपके मंगलाचरण में, दो कार्य समान हैं।

average हालांकि एक भारित औसत की गणना कर सकते हैं।

डॉक्टर लिंक: meanऔरaverage


0

पहले से ही उल्लेख किए गए मतभेदों के अलावा, एक और अत्यंत महत्वपूर्ण अंतर है जो मैंने अभी मुश्किल तरीके से खोजा है: इसके विपरीत np.mean, कीवर्ड की np.averageअनुमति नहीं देता है dtype, जो कुछ मामलों में सही परिणाम प्राप्त करने के लिए आवश्यक है। मेरे पास एक बहुत बड़ी एकल-सटीक सरणी है जो किसी h5फ़ाइल से एक्सेस की जाती है । अगर मैं मीन 0 और 1 को एक साथ लेता हूं, तो जब तक मैं निर्दिष्ट नहीं करता, मुझे बेतहाशा गलत परिणाम मिलते हैं dtype='float64':

>T.shape
(4096, 4096, 720)
>T.dtype
dtype('<f4')

m1 = np.average(T, axis=(0,1))                #  garbage
m2 = np.mean(T, axis=(0,1))                   #  the same garbage
m3 = np.mean(T, axis=(0,1), dtype='float64')  # correct results

दुर्भाग्य से, जब तक आप नहीं जानते कि आपको क्या देखना है, आप जरूरी नहीं बता सकते कि आपके परिणाम गलत हैं। मैं np.averageइस कारण से फिर कभी उपयोग नहीं करूंगा, लेकिन हमेशा np.mean(.., dtype='float64')किसी बड़े सरणी पर उपयोग करूंगा । अगर मैं एक भारित औसत चाहते हैं, मैं यह गणना करेंगे स्पष्ट रूप से या तो वजन वेक्टर के उत्पाद और लक्ष्य सरणी और उसके बाद का उपयोग कर np.sumया np.mean, उचित रूप में (और साथ ही उचित परिशुद्धता के साथ)।

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