2016-09-26 3 views
0

Ich habe eine Funktion, die einen 2D-Vektor nimmt und pdf (ein Skalar) dieses Punktes zurückgibt.Plot-Funktion von (x, y) mit 3D-Plot

Zur Veranschaulichung gibt myPDF(np.array[4,4]) einen einzelnen PDF-Wert unter < 4,4> zurück. Diese Funktion kann keine Liste von Vektoren aufnehmen und akzeptiert nur einen 2D-Vektor als Argument.

Jetzt möchte ich dieses pdf plotten plot_surface mit wie unten: enter image description here Dies ist, was ich

x = np.arange(-10,10) 
y = np.arange(-10,10) 
z = [ myPDF(np.array([xx,yy])) for xx in x for yy in y] 
xy = [ [xx, yy] for xx in x for yy in y] 

versucht haben Und hier ich stecken bin. Ich muss irgendwie z und xy in einigen richtigen Formen umformen, um sie mit plot_surface zu verwenden, aber ich weiß jetzt nicht wie. Ich habe auch Meshgrid ausprobiert, wusste aber nicht, wie man verschiedene Formen von Daten in legitime Formen für plot_surface konvertiert.

x, y = np.mgrid[-5:5,-5:5] 

Wenn ich mgrid wie oben verwende, gibt es mir 10x10 Matrix. Dann muss ich unter Verwendung meiner Funktion entsprechende z-Werte in 10x10-Matrix erzeugen, konnte aber keine Möglichkeit finden, x und y zu zerlegen, z-Werte zu erzeugen und z-Werte in einer geeigneten Form neu zu formatieren.

Das Hauptproblem hier ist, dass ich wenig Kenntnisse in der Manipulation von Daten habe, so konnte ich keinen guten Weg finden, diese Aufgabe zu erledigen. Daher würde ich gerne eine geeignete Methode zum Erzeugen eines Datensatzes für plot_surface mit meiner PDF-Funktion lernen.

Was ist eine gute Möglichkeit, Datenpunkte zu generieren, um diese mit meiner PDF-Funktion zu plotten? Danke, dass du diesem neuen B hilfst!

+1

* „Ich habe versucht arange, meshgrid und so weiter, kann aber nicht einen Weg, um ein ordnungsgemäßen Datenpunkte finden“ * - was war das Problem mit diesen Methoden? Zeig uns deinen Code. –

+0

@ali_m Ich habe gerade hinzugefügt, was ich versucht habe. Danke für Ihre Hilfe! – noclew

Antwort

1

Verwenden apply_along_axis

xy = np.stack(np.mgrid[-5:5,-5:5], axis=-1)  # xy[0,0] = x, y 
z = np.apply_along_axis(myPDF, axis=-1, arr=xy) # z[0,0] = myPDF(xy[0,0]) 
+0

wow Vielen Dank !!!!!! – noclew

+0

Übrigens, warum Achse ist -1? – noclew

+0

Ist hier eigentlich nicht wichtig, aber "axis =-" macht "x oder y" zur letzten Achse, was '(xij, yij) == (xy [i, j, 0], xy [i, j, 1]) == xy [i, j] '. Du könntest eine andere Achse wählen, aber dann wären 1 und 0 nicht die letzten. – Eric