2016-05-09 28 views
0

Ich bin ziemlich neu in Python und habe Frage folgende:Python maplotlib Sinuskurve mit random.randn

I numpy Arrays mit dem folgenden Code erzeugt:

X = np.random.randn(1000)*2 
Y = np.sin(x) 

Wie kann ich eine Visualisierung von oben erhalten Daten, die ähnlich aussieht:

enter image description here

Danke Jungs für jede Hilfe!

+0

Wenn Sie eine Funktion (zB 'sin') visualisieren möchten, wollen Sie nicht ein Zufallsvektor als 'X', Sie wollen über die 'X' Achse gleichmäßig verwenden 'np.linspace' Punkte zu probieren. Um sie zu visualisieren, verwenden Sie [Matplotlib] (http://matplotlib.org/). –

+0

Eigentlich geht es wie eine Sinuskurve zu sehen, aber da x Werte von einer Normalverteilung kommen, wird es weniger Punkte, wie Sie aus dem Mittelwert der Normalverteilung wegbewegen (0). Es wäre jedoch sinnvoller, np.linspace anstelle von np.random zu verwenden.randn – ayhan

+0

Warum wollen Sie zufällige Werte für 'X' verwenden? –

Antwort

1

Wenn Sie matplotlib.pyplot Sie sie als Streudiagramm dargestellt werden können, und eine grobe Annäherung an eine Sinuswelle erhalten.

Zum Beispiel mit Ihrem x- und y-Arrays:

import matplotlib.pyplot as plt 
import numpy as np 

X = np.random.rand(1000)*2 
Y = np.sin(X) 
plt.scatter(X,Y) 
plt.show() 

Sie werden mit etwas am Ende wie folgt:

enter image description here

EDIT Per Ihren Kommentar ich dies lief Sie:

sortx = np.argsort(X) 
plt.plot(X[sortx], Y[sortx], marker='.') 
plt.show() 

Sie finden diese Annäherung erhalten: enter image description here

Sie haben die argsort Indizes in X passieren, so dass er sie in der richtigen Reihenfolge Plots und das gleiche für Y, dass die Art und Weise Sie eine schöne glatte Linie bekommen (zumindest wo Ihre Daten am dichtesten sind.

Wenn Sie eine glatte Liniendarstellung der Sinuswelle wollen, dann könnte man einfach sagen:

z = np.arange(-6.28, 6.28, 0.1) 
plt.plot(z, np.sin(z)) 
plt.show() 

Sie werden mit diesem Ende: enter image description here

Offensichtlich möchten Sie vielleicht die einstellen x-Achse ticks, um Werte von Pi für eine bessere Darstellung darzustellen, aber ich denke, dass Sie die Idee bekommen.

+0

oh vielen dank! Das hat mir sehr geholfen. aber nur eine andere Frage. Gibt es eine Option, Argsort zu verwenden? Ich meine, ich weiß, was Argsort macht. Es gibt uns eine Reihe von Indizes der Werte zurück. Als ich meinem Lehrer sagte, dass ich Argsort benutzte, sagte er, es sei die richtige Richtung. aber mein Code ist fehlgeschlagen (siehe weiter oben schreiben) Wie ich bereits sagte, können wir nur Operationen an den generierten Arrays durchführen und wir dürfen die Art und Weise, wie Arrays generiert werden, nicht ändern. –

+0

könnten Sie ein Streudiagramm mit dem Argsort (X) erstellen, aber es wäre das gleiche wie mein erstes Diagramm. Ich bin mir nicht sicher, was Ihre Aufgabe ist, aber ich sehe keinen Unterschied zur Verwendung von np.argsort() oder np.sort(). Ist es so, dass du Y benutzen musst, wie du es ursprünglich veröffentlicht hast? Y = np.sin (X) '? – Grr

+0

ja, genau. Wir haben diese beiden Einschränkungen: Sie können nur Operationen an den generierten Arrays durchführen und die Art, wie Arrays generiert werden, nicht ändern. deshalb bin ich nur verwirrt und ich bin mir nicht sicher, wie viel ich diese Arrays ändern kann. Und da mein Tutor sagte, dass Argsort die richtige Richtung ist, dachte ich, es wäre der Trick ... zuerst dachte ich, ich müsste das Array sortieren. Aber jetzt frage ich mich, ob wir die Indizes verwenden sollen ... –

1

Sie können nur die Daten plotten Sie verwenden matplotlib zu erzeugen. Gefällt Ihnen dieses

import numpy as np 
import matplotlib.pyplot as plt 
X = np.random.randn(1000)*2 
Y = np.sin(X) 
plt.plot(X,Y,'green',linestyle='none',marker='.') 
plt.show() 

enter image description here

Wenn Sie die Punkte wollen durch eine Linie verbunden werden, dann linestyle='none' entfernen. Aber um chaotische Plotten zu vermeiden, auch sortieren Sie Ihre Zufallszahlen zuerst, dann Y. definieren

import numpy as np 
import matplotlib.pyplot as plt 
X = np.random.randn(1000)*2 
X=sorted(X) 
Y = np.sin(X) 
plt.plot(X,Y,'red',marker='.') 
plt.show() 

enter image description here