Wie kann man in Python effizient eine gerade Linie mit zufälliger Steigung und abfängt?

8

Betrachten Sie eine sehr einfache Monte-Carlo-Simulation einer geraden Linie y = m * x + b , z. Um den Effekt der Unsicherheit in den Parametern m und b zu visualisieren. m und b werden beide aus einer Normalverteilung entnommen. Ausgehend von einem MATLAB-Hintergrund würde ich dies als

schreiben %Vor%

Dies erzeugt die gewünschte Ausgabe, aber ich habe das Gefühl, dass es einen "pythonischen" Weg geben muss, dies zu tun. Liege ich falsch? Wenn nicht, könnte mir jemand ein Code-Beispiel dafür geben, wie man das effizienter macht?

Um ein Beispiel zu geben, nach dem ich suche: In MATLAB könnte dies einfach ohne die Schleife mit bsxfun() geschrieben werden. Gibt es in Python etwas Ähnliches oder vielleicht sogar ein Paket für solche Dinge?

    
Fred S 21.08.2014, 08:14
quelle

1 Antwort

6

Sie können numpy array broadcasting verwenden, um das Array y in einem zu erstellen Schritt wie unten gezeigt.

%Vor%

x[:, np.newaxis] erzwingt x , um ein Spaltenvektor der Form (50, 1) zu werden, im Gegensatz zu (50,) , was bedeutet, dass die Übertragung funktioniert.

Sie können dann direkt über das numpy-Array iterieren (statt über dessen Index zu iterieren), aber Sie müssen das Array transponieren (mit y.transpose() ), sonst erhalten Sie für jede Iteration den x-Wert für jeweils 1000 Zufallszahlen .

    
Ffisegydd 21.08.2014, 08:35
quelle

Tags und Links