W rzeczywistości, o ile widzę, dokumentacja nie wyjaśnia tego od razu. Nie mówię, że nie można tego powiedzieć, ale myślę, że to pytanie jest ważne dla przepełnienia stosu.
BlackVegetable,
1
numpy.mean: Zwraca średnią z elementów tablicy.
joaquin
@joaquin: „Oblicz średnią arytmetyczną wzdłuż określonej osi.” vs „Oblicz średnią ważoną wzdłuż określonej osi.”?
Blender
@ Blender prawo. Właśnie próbowałem udzielić pewnego rodzaju śmiesznej odpowiedzi na twój komentarz, ponieważ jeśli zastosuję się do twoich instrukcji, pierwszą rzeczą, którą przeczytałem w dokumentacji dla numpy.mean jest numpy.mean: Zwraca średnią z elementów tablicy, co jest śmieszne, jeśli jesteś szukam odpowiedzi na pytanie PO.
joaquin
Odpowiedzi:
181
np. średnia przyjmuje opcjonalny parametr wagi. Jeśli nie jest dostarczony, są równoważne. Spójrz na kod źródłowy: Mean , Average
Dlaczego oferują dwie różne funkcje? Wydaje się, że powinni po prostu zaoferować, np.averageponieważ weightsjest już opcjonalny. Wydaje się niepotrzebny i służy jedynie do dezorientacji użytkowników.
Geoff
6
@Geoff Wolę, aby rzucili NotImplementedException dla „średniej”, aby uświadomić użytkownikom, że średnia arytmetyczna nie jest identyczna z „średnią”.
FooBar
27
np.mean zawsze oblicza średnią arytmetyczną i ma kilka dodatkowych opcji wejścia i wyjścia (np. jakich typów danych użyć, gdzie umieścić wynik).
np.averagemoże obliczyć średnią ważoną, jeśli weightsparametr jest podany.
Oprócz wspomnianych różnic, istnieje jeszcze jedna niezwykle ważna różnica, którą właśnie odkryłem na własnej skórze: w przeciwieństwie do np.mean, np.averagenie zezwala na dtypesłowo kluczowe, które jest niezbędne do uzyskania poprawnych wyników w niektórych przypadkach. Mam bardzo dużą tablicę o pojedynczej precyzji, do której można uzyskać dostęp z h5pliku. Jeśli wezmę średnią wzdłuż osi 0 i 1, otrzymam bardzo niepoprawne wyniki, chyba że podam dtype='float64':
Niestety, chyba że wiesz, czego szukać, niekoniecznie musisz powiedzieć, że wyniki są złe. Nigdy więcej nie np.averageużyję z tego powodu, ale zawsze użyję np.mean(.., dtype='float64')na dowolnej dużej tablicy. Jeśli chcę średnią ważoną, obliczę ją jawnie, używając iloczynu wektora wagi i tablicy docelowej, a następnie albo, np.sumalbo np.meanodpowiednio (z odpowiednią dokładnością).
Odpowiedzi:
np. średnia przyjmuje opcjonalny parametr wagi. Jeśli nie jest dostarczony, są równoważne. Spójrz na kod źródłowy: Mean , Average
np.mean:
np. średnia:
źródło
np.average
ponieważweights
jest już opcjonalny. Wydaje się niepotrzebny i służy jedynie do dezorientacji użytkowników.np.mean
zawsze oblicza średnią arytmetyczną i ma kilka dodatkowych opcji wejścia i wyjścia (np. jakich typów danych użyć, gdzie umieścić wynik).np.average
może obliczyć średnią ważoną, jeśliweights
parametr jest podany.źródło
W niektórych wersjach numpy istnieje inna ważna różnica, o której musisz wiedzieć:
average
nie bierz pod uwagę masek, więc oblicz średnią z całego zestawu danych.mean
bierze pod uwagę maski kont, więc obliczaj średnią tylko dla niezamaskowanych wartości.źródło
np.ma.average
działa. Istnieje również raport o błędzie .W twoim wywołaniu dwie funkcje są takie same.
average
może jednak obliczyć średnią ważoną.Łącza do dokumentów:
mean
iaverage
źródło
Oprócz wspomnianych różnic, istnieje jeszcze jedna niezwykle ważna różnica, którą właśnie odkryłem na własnej skórze: w przeciwieństwie do
np.mean
,np.average
nie zezwala nadtype
słowo kluczowe, które jest niezbędne do uzyskania poprawnych wyników w niektórych przypadkach. Mam bardzo dużą tablicę o pojedynczej precyzji, do której można uzyskać dostęp zh5
pliku. Jeśli wezmę średnią wzdłuż osi 0 i 1, otrzymam bardzo niepoprawne wyniki, chyba że podamdtype='float64'
:Niestety, chyba że wiesz, czego szukać, niekoniecznie musisz powiedzieć, że wyniki są złe. Nigdy więcej nie
np.average
użyję z tego powodu, ale zawsze użyjęnp.mean(.., dtype='float64')
na dowolnej dużej tablicy. Jeśli chcę średnią ważoną, obliczę ją jawnie, używając iloczynu wektora wagi i tablicy docelowej, a następnie albo,np.sum
albonp.mean
odpowiednio (z odpowiednią dokładnością).źródło