क्या संख्याओं की सूची के अंकगणितीय माध्य (एक प्रकार का औसत) की गणना करने के लिए पायथन में एक अंतर्निहित या मानक पुस्तकालय विधि है?
क्या संख्याओं की सूची के अंकगणितीय माध्य (एक प्रकार का औसत) की गणना करने के लिए पायथन में एक अंतर्निहित या मानक पुस्तकालय विधि है?
जवाबों:
मुझे मानक पुस्तकालय में कुछ भी पता नहीं है। हालाँकि, आप कुछ का उपयोग कर सकते हैं:
def mean(numbers):
return float(sum(numbers)) / max(len(numbers), 1)
>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0
सुन्न में, वहाँ है numpy.mean()
।
[]
है 0
, जो कि किया जा सकता है float(sum(l))/max(len(l),1)
।
max
?
न्यूमपी के पास एक numpy.mean
अंकगणित माध्य है। उपयोग इस प्रकार सरल है:
>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
उपयोग करें statistics.mean
:
import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335
यह पायथन 3.4 के बाद से उपलब्ध है। 3.1-3.3 उपयोगकर्ताओं के लिए, मॉड्यूल का एक पुराना संस्करण नाम के तहत PyPI पर उपलब्ध है stats
। बस statistics
करने के लिए बदल जाते हैं stats
।
timeit("numpy.mean(vec))
, timeit("sum(vec)/len(vec)")
और timeit("statistics.mean(vec)")
- बाद वाला एक विशाल कारक (मेरे पीसी पर कुछ मामलों में 100) द्वारा दूसरों की तुलना में धीमा है। यह प्रकट होता है की एक विशेष रूप से सटीक क्रियान्वयन के कारण हो करने के लिए sum
में ऑपरेटर statistics
, देख पीईपी और कोड । के बीच बड़े प्रदर्शन अंतर की वजह के बारे में सुनिश्चित नहीं हैं statistics._sum
और numpy.sum
यद्यपि,।
statistics.mean
होने की कोशिश करता है । यह सही मायने में गणना करता है । [1e50, 1, -1e50] * 1000
statistics.mean
मानों की एक जनरेटर अभिव्यक्ति को भी स्वीकार करेगा, जो कि len()
भाजक के लिए उपयोग किए जाने वाले सभी समाधानों पर विचार करेंगे।
तुम भी सुन्न या डरपोक की जरूरत नहीं है ...
>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
from __future__ import division
अपने कार्यक्रम के शीर्ष पर हैं
a = list()
? में प्रस्तावित कोड परिणाम ZeroDivisionError
।
का उपयोग करें:
import scipy;
a=[1,2,4];
print(scipy.mean(a));
फ़्लोट करने के लिए कास्टिंग के बजाय आप निम्नलिखित कर सकते हैं
def mean(nums):
return sum(nums, 0.0) / len(nums)
या लंबोदर का उपयोग कर
mean = lambda nums: sum(nums, 0.0) / len(nums)
अपडेट: 2019-12-15
पायथन 3.8 ने आंकड़े मॉड्यूल में फ़ंक्शन फेमिन को जोड़ा । जो तेज है और हमेशा फ्लोट करता है।
डेटा को फ़्लोट में कनवर्ट करें और अंकगणित माध्य की गणना करें।
यह माध्य () फ़ंक्शन की तुलना में तेजी से चलता है और यह हमेशा एक फ्लोट देता है। डेटा एक अनुक्रम या चलने योग्य हो सकता है। यदि इनपुट डेटासेट खाली है, तो एक AnalyticsError उठाता है।
fmean ([3.5, 4.0, 5.25])
4.25
संस्करण 3.8 में नया।
from statistics import mean
avarage=mean(your_list)
उदाहरण के लिए
from statistics import mean
my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)
और परिणाम है
3.0
def avg(l):
"""uses floating-point division."""
return sum(l) / float(len(l))
l1 = [3,5,14,2,5,36,4,3]
l2 = [0,0,0]
print(avg(l1)) # 9.0
print(avg(l2)) # 0.0
def list_mean(nums):
sumof = 0
num_of = len(nums)
mean = 0
for i in nums:
sumof += i
mean = sumof / num_of
return float(mean)
मुझे हमेशा माना जाता avg
है कि यह बिलिडंस / स्टडलिब से छोड़ा गया है क्योंकि यह उतना ही सरल है
sum(L)/len(L) # L is some list
और किसी भी चेतावनी को पहले से ही स्थानीय उपयोग के लिए कॉलर कोड में संबोधित किया जाएगा ।
उल्लेखनीय चेतावनी:
गैर-फ्लोट परिणाम: python2, 9/4 में 2. हल करने के लिए, उपयोग float(sum(L))/len(L)
याfrom __future__ import division
शून्य से विभाजन: सूची खाली हो सकती है। हल करना:
if not L:
raise WhateverYouWantError("foo")
avg = float(sum(L))/len(L)
आपके प्रश्न का उचित उत्तर उपयोग करना है statistics.mean
। लेकिन मज़े के लिए, यहां इसका मतलब का एक संस्करण है जो len()
फ़ंक्शन का उपयोग नहीं करता है , इसलिए इसे (जैसे statistics.mean
) जनरेटर पर उपयोग किया जा सकता है, जो समर्थन नहीं करता है len()
:
from functools import reduce
from operator import truediv
def ave(seq):
return truediv(*reduce(lambda a, b: (a[0] + b[1], b[0]),
enumerate(seq, start=1),
(0, 0)))
अन्य लोगों ने पहले से ही बहुत अच्छे उत्तर पोस्ट किए हैं, लेकिन कुछ लोग अभी भी मीन (एवीजी) को खोजने के लिए एक क्लासिक तरीके की तलाश कर रहे हैं, इसलिए यहां मैं इसे (पायथन 3.6 में परीक्षण किया गया कोड) पोस्ट करता हूं:
def meanmanual(listt):
mean = 0
lsum = 0
lenoflist = len(listt)
for i in listt:
lsum += i
mean = lsum / lenoflist
return float(mean)
a = [1, 2, 3, 4, 5, 6]
meanmanual(a)
Answer: 3.5