it-swarm.com.de

Berechnung des arithmetischen Mittelwerts (ein Durchschnittstyp) in Python

Gibt es in Python eine integrierte oder standardisierte Bibliotheksmethode, um den arithmetischen Mittelwert (eine Art von Durchschnitt) einer Liste von Zahlen zu berechnen?

237
jrdioko

In der Standardbibliothek ist mir nichts bekannt. Sie könnten jedoch Folgendes verwenden:

def mean(numbers):
    return float(sum(numbers)) / max(len(numbers), 1)

>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0

In Nummer gibt es numpy.mean() .

266
NPE

NumPy hat ein numpy.mean , welches ein arithmetisches Mittel ist. Die Nutzung ist so einfach wie folgt:

>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
181
Bengt

In Python 3.4 gibt es ein neues statistics Modul. Sie können jetzt statistics.mean verwenden:

import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335

Für Benutzer der Version 3.1-3.3 ist die ursprüngliche Version des Moduls unter PyPI unter dem Namen stats verfügbar. Ändern Sie einfach statistics in stats.

164
kirbyfan64sos

Du brauchst noch nicht einmal ein wenig oder scipy ...

>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
49
Mumon

Benutze scipy:

import scipy;
a=[1,2,4];
print(scipy.mean(a));
8
Elendurwen

Anstatt zu schweben, können Sie Folgendes tun

def mean(nums):
    return sum(nums, 0.0) / len(nums)

oder mit Lambda

mean = lambda nums: sum(nums, 0.0) / len(nums)
6
Vlad Bezden
def avg(l):
    """uses floating-point division."""
    return sum(l) / float(len(l))

Beispiele:

l1 = [3,5,14,2,5,36,4,3]
l2 = [0,0,0]

print(avg(l1)) # 9.0
print(avg(l2)) # 0.0
2
jasonleonhard
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)
2
Muhoza yves

Ich gehe immer davon aus, dass avg in der builtins/stdlib weggelassen wird, weil es so einfach ist wie

sum(L)/len(L) # L is some list

und eventuelle Vorbehalte wären bereits im lokalen Code für Anrufer/in adressiert.

Bemerkenswerte Vorbehalte:

  1. nicht-Float-Ergebnis: In Python2 ist 9/4 2. Zum Auflösen verwenden Sie float(sum(L))/len(L) oder from __future__ import division

  2. division durch Null: Die Liste ist möglicherweise leer. lösen:

    if not L:
        raise WhateverYouWantError("foo")
    avg = float(sum(L))/len(L)
    
0
n611x007
from statistics import mean
avarage=mean(your_list)

zum Beispiel

from statistics import mean

my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)

und das Ergebnis ist

3.0
0
fariborz najafi

Die richtige Antwort auf Ihre Frage lautet statistics.mean. Aber zum Spaß ist hier eine Version von mean, die die Funktion len() nicht verwendet. Daher kann sie (wie statistics.mean) auf Generatoren verwendet werden, die len() nicht unterstützen:

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)))
0
PaulMcG