Fast willkürliche Verteilung (random sampling
Den random
Modul (http://docs.python.org/2/library/random.html) hat mehrere festen Funktionen zur zufälligen Stichprobe aus. Zum Beispiel random.gauss
Stichprobe zufälliger Punkt aus einer normalen Verteilung mit einem gegebenen Mittelwert-und sigma-Werte.
Ich bin auf der Suche nach einem Weg zum extrahieren einer Anzahl N
von Stichproben zwischen einem gegebenen Intervall mit meine eigene distribution so schnell wie möglich in python
. Dies ist, was ich meine:
def my_dist(x):
# Some distribution, assume c1,c2,c3 and c4 are known.
f = c1*exp(-((x-c2)**c3)/c4)
return f
# Draw N random samples from my distribution between given limits a,b.
N = 1000
N_rand_samples = ran_func_sample(my_dist, a, b, N)
wo ran_func_sample
ist das, was ich nach und a, b
sind die Grenzen, von denen man die Proben. Gibt es etwas in der Art in python
?
Sie können einfach rufen Sie Ihre Funktion N-mal. Allerdings müssen Sie noch angeben, welche distribution Sie wollen Ihre
Meine distribution ist meine Funktion. Ich muss bewerten, die Funktion zufällig N-mal zwischen einem bestimmten Intervall.
Ihre Funktion ist nicht eine Verteilung. Sie müssen entscheiden, was die Verteilung auf die Argumente, die Sie nennen Sie es mit. Wenn Sie möchten, um es zu übergeben N zufällige Werte "zwischen einem bestimmten Intervall", wo Sie die Angabe des Intervalls im code Beispiel? Wollen Sie die random -
Ich vergaß das Intervall angeben, füge ich es an den code. Sie haben Recht, ich erklärte mich selbst schlecht geben eine
Ich habe diesen code für diskrete Verteilungen. Alles kann angenähert werden mit einer diskreten Verteilung, und es macht die Dinge viel einfacher (obwohl immer noch nicht trivial, um numerische Robustheit). Wenn dir das hilft könnte ich es einpacken.
x
Werte gewählt werden.Meine distribution ist meine Funktion. Ich muss bewerten, die Funktion zufällig N-mal zwischen einem bestimmten Intervall.
Ihre Funktion ist nicht eine Verteilung. Sie müssen entscheiden, was die Verteilung auf die Argumente, die Sie nennen Sie es mit. Wenn Sie möchten, um es zu übergeben N zufällige Werte "zwischen einem bestimmten Intervall", wo Sie die Angabe des Intervalls im code Beispiel? Wollen Sie die random -
x
Werte ausgewählt werden, die gleichförmig aus, Intervall, oder in irgendeiner anderen Art und Weise?Ich vergaß das Intervall angeben, füge ich es an den code. Sie haben Recht, ich erklärte mich selbst schlecht geben eine
x**2
Funktion und nicht um eine distribution. Ich werde versuchen, dass zu beheben jetzt.Ich habe diesen code für diskrete Verteilungen. Alles kann angenähert werden mit einer diskreten Verteilung, und es macht die Dinge viel einfacher (obwohl immer noch nicht trivial, um numerische Robustheit). Wenn dir das hilft könnte ich es einpacken.
InformationsquelleAutor Gabriel | 2014-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Inverse Transformation sampling Methode, um zufällige Werte entsprechend verteilt ein Gesetz Sie wollen. Mit dieser Methode können Sie nur anwenden invertierten Funktion
um Zufallszahlen, die standard-Gleichverteilung in das Intervall [0,1].
Nachdem Sie die umgekehrte Funktion, Sie erhalten 1000 Nummern verteilt entsprechend der erforderlichen Verteilung dieser offensichtlichen Weise:
Mehr auf Inverse Transformation Sampling:
Da gibt es auch eine gute Frage auf StackOverflow zum Thema:
Viele Funktionen, die kann man wollen, ziehen Stichproben aus nicht analytisch invertierbar ist.
InformationsquelleAutor Igor Chubin
Dieser code implementiert die Probenahme des n-d-diskrete Wahrscheinlichkeitsverteilungen. Indem Sie ein flag auf das Objekt, es kann auch verwendet werden, als eine stückweise Konstante Wahrscheinlichkeitsverteilung, die dann verwendet werden können, um annähernd beliebige pdf-Dateien. Gut, beliebige PDF-Dateien mit compact-Unterstützung; wenn Sie effizient probieren will extrem langen Schwanz, eine nicht-einheitliche Beschreibung der pdf-Datei erforderlich wäre. Aber das ist immer noch wirksam, auch für Dinge wie luftig-point-spread-Funktionen (die ich erstellt es für Sie, zunächst). Die interne Sortierung der Werte ist absolut wichtig, es zu bekommen Genauigkeit; die vielen kleinen Werte in den Schwanz, der dazu beitragen sollte deutlich, aber Sie bekommen Sie ertrunken im fp-Genauigkeit ohne Sortierung.
Und als mehr der realen Welt relevant Beispiel:
Könnten Sie bitte erklären die Natur der Transformation ? Ich weiß nicht so Recht, was Sie tut!
Wenn Sie unspezifiziert, die return-Werte sind identisch zu den Indizes der input-array, die Angabe der diskrete PDF. Die Transformation einfach können Sie die Neuzuordnung dieser Werte; ordnen Sie diese einem Bereich [0..1) oder was auch immer. Ehrlich gesagt ist es nicht wirklich gehören in dieser Klasse zum Wohle der Beantwortung dieser Frage; hier gelandet aus dem Projekt ich zog es aus.
InformationsquelleAutor Eelco Hoogendoorn
Also, wenn wir geben unsere Daten Stichprobe, der eine bestimmte Verteilung, die
inverse_transform_sampling
Funktion zurückgegeben wird ein dataset mit genau der gleichen Verteilung. Hier ist der Vorteil, dass können wir unsere eigene sample-Größe durch die Angabe in dern_samples
variable.InformationsquelleAutor ThePredator
War ich in einer ähnlichen situation, aber ich wollte Stichprobe aus einer multivariaten Verteilung, also, ich implementiert eine rudimentäre version des Metropolis-Hastings (MCMC-Methode).
Erfordert auch diese Funktion eine Funktion
target_density
die in einem Daten-Punkt und berechnet die Wahrscheinlichkeit.Details check-out dieser ausführliche Antwort von mir.
InformationsquelleAutor Abdul Fatir