2014-02-12 8 views
17

Ich verwende die randn und normal Funktionen von Python numpy.random Modul. Die Funktionen sind ziemlich ähnlich von dem, was ich in dem Handbuch http://docs.scipy.org gelesen habe (sie betreffen beide die Gauss-Verteilung), aber gibt es irgendwelche subtileren Unterschiede, die mir bewusst sein sollten? Wenn ja, in welchen Situationen wäre es besser, eine bestimmte Funktion zu verwenden?Python Unterschied zwischen randn und normal

+2

Sie scheinen mir anders. 'normal': Zeichnen Sie Stichproben aus einer normalen (Gaußschen) Verteilung. 'randn': Liefert eine zufällige Matrix mit Daten aus der" Standard Normal "Verteilung – hughdbrown

+4

@hughdbrown Gleiche Verteilung, etwas andere Art der Nutzung. –

Antwort

14

randn scheint eine Verteilung von einigen standardisierten Normalverteilung (Mittelwert 0 und Varianz 1) zu geben. normal benötigt mehr Parameter für mehr Kontrolle. So rand scheint einfach eine Komfortfunktion zu sein

+3

Sie rufen am Ende die gleiche C-Funktion ('rk_gauss') auf. Ich denke, 'randn' existiert hauptsächlich, um MATLAB-Konvertierte glücklich zu machen. Das MATLAB 'randn' scheint mehr oder weniger identisch zu sein. –

+0

Ahh, in welcher Datei sind sie definiert? Ich dachte, dass das der Fall war und sah ein bisschen in der Quelle aus, aber ich konnte es nicht finden. – M4rtini

+0

'numpy/random/mtrand/verteilungen.c' –

38

Ich bin ein Statistiker, der manchmal Codes, nicht umgekehrt, so ist dies etwas, was ich mit einiger Genauigkeit beantworten kann.

bei der Dokumentation suchen, das Sie in Ihrer Frage verknüpft, ich einige der wichtigsten Unterschiede hervorheben werden:

normal:

numpy.random.normal(loc=0.0, scale=1.0, size=None) 
# Draw random samples from a normal (Gaussian) distribution. 

# Parameters : 
# loc : float -- Mean (“centre”) of the distribution. 
# scale : float -- Standard deviation (spread or “width”) of the distribution. 
# size : tuple of ints -- Output shape. If the given shape is, e.g., (m, n, k), then m * n * k samples are drawn. 

So in diesem Fall sind Sie erzeugen ein GENERIC Normalverteilung (mehr Details zu dem, was das später bedeutet).

randn:

numpy.random.randn(d0, d1, ..., dn) 
# Return a sample (or samples) from the “standard normal” distribution. 

# Parameters : 
# d0, d1, ..., dn : int, optional -- The dimensions of the returned array, should be all positive. If no argument is given a single Python float is returned. 
# Returns : 
# Z : ndarray or float -- A (d0, d1, ..., dn)-shaped array of floating-point samples from the standard normal distribution, or a single such float if no parameters were supplied. 

In diesem Fall sind Sie erzeugen eine BESONDEREN Normalverteilung, die Standardverteilung.


Jetzt sind einige der Mathematik, die wirklich benötigt wird, im Mittelpunkt der Frage zu erhalten:

Eine Normalverteilung eine Verteilung ist, wo die Werte sind eher nahe dem Mittelwert auftreten . Es gibt eine Reihe von Fällen davon in der Natur. ZB ist die durchschnittliche hohe Temperatur in Dallas im Juni, sagen wir, 95 F. Es könnte 100, oder sogar 105 Durchschnitt in einem Jahr erreichen, aber es wird typischerweise in der Nähe von 95 oder 97 sein. Ebenso könnte es so niedrig wie erreichen 80, aber 85 oder 90 ist wahrscheinlicher.

Also, es unterscheidet sich grundlegend von sagen wir, eine gleichmäßige Verteilung (Rolling eine ehrliche 6-seitige Würfel).


A Standard Normalverteilung ist nur eine normale Verteilung, wobei der Mittelwert 0 und die Varianz (der mathematische Ausdruck für die Variation) ist 1.

So

numpy.random.normal(size= (10, 10)) 

ist genau das gleiche wie das Schreiben

numpy.random.randn(10, 10) 

, da die Standard Werte (Loc = 0, Maßstab = 1) für numpy.random.normal in der Tat die Standard Verteilung sind.

Erschwerend kommt noch verwirrender, als die numpy random documentation Staaten:

sigma * np.random.randn(...) + mu 

die gleiche ist wie

np.random.normal(loc= mu, scale= sigma, ...) 

* Schlussbemerkung: Ich habe den Begriff Varianz verwendet mathematisch Variation zu beschreiben. Manche Leute sagen Standardabweichung. Die Varianz entspricht einfach dem Quadrat der Standardabweichung. Da die Varianz = 1 für die Standardverteilung ist, in diesem Fall der Standardverteilung, variance == standard deviation.

+0

Ihre Antwort scheint interessant. Aber wie kann man Rauschen erzeugen, wenn die Messung, sagen wir, Geschwindigkeit von etwas ist? Rauschen sollte nur positive Werte enthalten ..?! Wenn das der Fall ist, kann die Normalverteilung keinen positiven Wert erzeugen, richtig? – Spider

+1

Ich bin mir nicht sicher, ich folge @Spider. Wenn ich dir folge, fragst du, wie Werte auch unter dem Mittelwert liegen können. Die Definition der Standardabweichung ist die Variation RUND um den Mittelwert. Das heißt, sowohl darüber als auch darunter. Nicht genug Platz, um hier hineinzukommen, aber schaut euch http://en.wikipedia.org/wiki/Standard_deviation oder http://en.wikipedia.org/wiki/Normal_distribution –

+0

Oh, jetzt verstehe ich, was du gesagt hast: Ja, eine "Geschwindigkeit" (keine Geschwindigkeit, die ein Vektor ist) darf nur positive Zahlen haben. Und ja, eine normale Verteilung erlaubt negative Zahlen. Wie Ihre Intuition bereits sagt, folgt also eine Geschwindigkeit keiner normalen Verteilung. Es gibt viele andere Arten von Verteilungen, wie Poisson oder Binomial. –

Verwandte Themen