2016-06-04 14 views
0

ich Benutzer nur ein Anfänger Python sind Koordinaten so mit mir tragen,Python 2d Raster: Werte zuweisen im Raster

ich ein 2d XY-Gittern mit np.meshgrid erstellt habe, und würde gerne wissen, wie um einigen Punkten im Raster Werte zuzuweisen. Die Anwendung besteht darin, eine Masse auf bestimmte Punkte im Gitter einzustellen, um Punktmassen zu modellieren. Mein Code ist ab sofort wie folgt:

import numpy as np 
x = np.arange(11) 
y = np.arange(11) 

X, Y = np.meshgrid(x,y) 

Vielen Dank!

+0

Was meinen Sie mit "Werte zu einigen der Punkte im Raster zuweisen." Wie haben Sie ein Z-Array von Werten für jede X, Y-Koordinate? –

+0

Nun ja, so etwas, aber ich konnte mir nicht vorstellen, wie man das Z als Funktion von X- und Y-Koordinaten in Beziehung setzt und es dann als Kontur darstellt, um es zu visualisieren – ThunderFlash

+0

@karasinski gab dir eine Antwort auf das, was du scheinst fragen. Sie können jeden Wert direkt durch die Attribution'Z [5,5] = 5 'angeben. Was soll dein Raster darstellen? Arbeiten Sie in der Schätzung? – armatita

Antwort

1

Da Sie ein Anfänger Python-Benutzer sind, empfehle ich dringend, nehmen Sie sich die Zeit, um die Dokumentation für die Pakete, die Sie verwenden, zu überprüfen. Antwortet diese example from matplotlib's documentation Ihre Frage?

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
from matplotlib.ticker import LinearLocator, FormatStrFormatter 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
X = np.arange(-5, 5, 0.25) 
Y = np.arange(-5, 5, 0.25) 
X, Y = np.meshgrid(X, Y) 
R = np.sqrt(X**2 + Y**2) 
Z = np.sin(R) 
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, 
         linewidth=0, antialiased=False) 
ax.set_zlim(-1.01, 1.01) 

ax.zaxis.set_major_locator(LinearLocator(10)) 
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) 

fig.colorbar(surf, shrink=0.5, aspect=5) 

plt.show() 

Alternativ könnten Sie sehen auch die numpy documentation für die meshgrid-Funktion, die ein ähnliches Beispiel gibt:

x = np.arange(-5, 5, 0.1) 
y = np.arange(-5, 5, 0.1) 
xx, yy = meshgrid(x, y, sparse=True) 
z = np.sin(xx**2 + yy**2)/(xx**2 + yy**2) 
h = plt.contourf(x,y,z) 

EDIT

Wenn Sie manuell die Werte von Z einstellen , können Sie etwas in Richtung

fig = plt.figure() 
ax = fig.gca(projection='3d') 
x = np.arange(11) 
y = np.arange(11) 
X, Y = np.meshgrid(x,y) 
Z = np.zeros_like(X) 
Z[5][5] = 5 
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1) 
plt.show() 
tun

enter image description here

+1

Danke für Ihren Vorschlag! Aber ich bin schon früher auf diese Beispiele gestoßen, und ich bin mit der Definition einer Funktion z über die gesamte XY-Koordinatenebene vertraut. Was ich festzustecken scheint, ist, dass (x, y) = (5,5) einen z-Wert von 5 hat. Ein bestimmter Wert für eine bestimmte Koordinate. Ich bin mir nicht sicher, wie ich das machen soll? Ein Beispiel wäre ein Gitter von 10 x 10. Ich möchte, dass die (5,5) -Koordinate eine Größe von 5 hat. Wie würde ich das definieren? – ThunderFlash

+1

Ich aktualisierte die Antwort oben. :) –

+0

Genau das, was ich gesucht habe, vielen Dank! :) – ThunderFlash