Python'da bir sayı listesinin aritmetik ortalamasını (ortalama bir tür) hesaplamak için yerleşik veya standart bir kütüphane yöntemi var mı?
Python'da bir sayı listesinin aritmetik ortalamasını (ortalama bir tür) hesaplamak için yerleşik veya standart bir kütüphane yöntemi var mı?
Yanıtlar:
Standart kütüphanedeki hiçbir şeyin farkında değilim. Ancak, aşağıdaki gibi bir şey kullanabilirsiniz:
def mean(numbers):
return float(sum(numbers)) / max(len(numbers), 1)
>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0
Numpy'de var numpy.mean()
.
[]
olduğu 0
yapılabilir, hangi float(sum(l))/max(len(l),1)
.
max
?
NumPy, numpy.mean
aritmetik bir ortalamaya sahiptir. Kullanımı bu kadar basit:
>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
Kullanım statistics.mean
:
import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335
Python 3.4'ten beri mevcuttur. 3.1-3.3 kullanıcıları için, modülün eski bir sürümü PyPI'de adıyla bulunur stats
. Sadece değiştirmek statistics
için stats
.
timeit("numpy.mean(vec))
, timeit("sum(vec)/len(vec)")
ve timeit("statistics.mean(vec)")
- ikincisi büyük bir faktör (benim PC'de bazı durumlarda> 100) tarafından diğerlerinden daha yavaştır. Bu, sum
operatörün özellikle hassas bir şekilde uygulanmasından kaynaklanıyor gibi görünüyor statistics
, bkz. PEP ve Kod . Bununla birlikte , statistics._sum
ve arasındaki büyük performans farkının nedeninden emin değilim numpy.sum
.
statistics.mean
olmaya çalışır çünkü . Ortalamasını doğru hesaplar . [1e50, 1, -1e50] * 1000
statistics.mean
ayrıca len()
bölen için kullanılan tüm çözümlerin boşalacağı bir değer üreteci ifadesini kabul edecektir.
Numpy veya scipy'ye bile ihtiyacınız yok ...
>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
from __future__ import division
programınızın
a = list()
? Önerilen kod ile sonuçlanır ZeroDivisionError
.
Scipy kullanın:
import scipy;
a=[1,2,4];
print(scipy.mean(a));
Yüzmek için döküm yapmak yerine aşağıdakileri yapabilirsiniz
def mean(nums):
return sum(nums, 0.0) / len(nums)
veya lambda kullanarak
mean = lambda nums: sum(nums, 0.0) / len(nums)
GÜNCELLEME: 2019-12-15
Python 3.8 fonksiyon eklendi fmean için istatistik modülü. Hangi daha hızlı ve her zaman float döner.
Verileri kayan noktaya dönüştürün ve aritmetik ortalamayı hesaplayın.
Bu, mean () işlevinden daha hızlı çalışır ve her zaman bir kayan nokta döndürür. Veriler bir sekans veya tekrarlanabilir olabilir. Girdi veri kümesi boşsa, bir StatisticsError oluşturur.
fmean ([3.5, 4.0, 5.25])
4.25
3.8 sürümündeki yenilikler.
from statistics import mean
avarage=mean(your_list)
Örneğin
from statistics import mean
my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)
ve sonuç
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)
Her zaman avg
yerleşiklerden / stdlib'den çıkarıldım çünkü bu kadar basit
sum(L)/len(L) # L is some list
ve tüm uyarılar zaten yerel kullanım için arayan kodunda ele alınacaktır .
Önemli uyarılar:
float dışı sonuç: python2'de 9/4 2'dir. çözmek, kullanmak float(sum(L))/len(L)
veyafrom __future__ import division
sıfıra bölme: liste boş olabilir. çözmek için:
if not L:
raise WhateverYouWantError("foo")
avg = float(sum(L))/len(L)
Sorunuzun doğru cevabı kullanmaktır statistics.mean
. Ancak eğlence için, len()
işlevi kullanmayan bir ortalama sürümdür , bu yüzden (gibi statistics.mean
) desteklemeyen jeneratörlerde kullanılabilir 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)))
Diğerleri zaten çok iyi cevaplar gönderdi, ancak bazı insanlar hala Ortalama (avg) bulmak için klasik bir yol arıyor olabilir, bu yüzden burada bunu gönderiyorum (kod Python 3.6'da test edildi):
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