मुझे लगता है कि
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
हालांकि, कुछ अंतर होने चाहिए, क्योंकि आखिरकार वे दो अलग-अलग कार्य हैं।
उनके बीच क्या अंतर हैं?
मुझे लगता है कि
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
हालांकि, कुछ अंतर होने चाहिए, क्योंकि आखिरकार वे दो अलग-अलग कार्य हैं।
उनके बीच क्या अंतर हैं?
जवाबों:
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
...
np.average
के बाद से weights
पहले से ही वैकल्पिक है। अनावश्यक लगता है और केवल उपयोगकर्ताओं को भ्रमित करने का कार्य करता है।
सुन्न के कुछ संस्करण में एक और महत्वपूर्ण अंतर है जो आपको पता होना चाहिए:
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
np.ma.average
काम करता है। इसके अलावा, एक बग रिपोर्ट है ।
आपके मंगलाचरण में, दो कार्य समान हैं।
average
हालांकि एक भारित औसत की गणना कर सकते हैं।
पहले से ही उल्लेख किए गए मतभेदों के अलावा, एक और अत्यंत महत्वपूर्ण अंतर है जो मैंने अभी मुश्किल तरीके से खोजा है: इसके विपरीत 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
, उचित रूप में (और साथ ही उचित परिशुद्धता के साथ)।