Gradienten-Berechnung mit python

Ich würde gerne wissen, wie funktioniert numpy.gradient Arbeit.
Ich benutzte Gradienten zu versuchen zu berechnen group velocity (group velocity of a wave-packet ist die Ableitung von Frequenzen hinsichtlich wavenumbers, nicht eine Gruppe von Geschwindigkeiten). Ich fütterte ein 3-Spalten-array zu, die ersten 2 Spalten sind die x und y coords, die Dritte Spalte ist die Frequenz, die der Punkt (x,y). Ich brauche zu berechnen Steigung und ich erwartete, ein 2d-Vektor wird gradient definition

df/dx*i+df/dy*j+df/dz*k 

und meine Funktion nur eine Funktion von x und y habe ich etwas erwarten wie

df/dx*i+df/dy*j 

Aber ich habe 2 arrays mit 3 Spalten jeweils, also 2 3d-Vektoren; zuerst dachte ich, dass die Summe der beiden würde mir die vector ich waren searchin für aber die z-Komponente nicht verschwinden. Ich hoffe, ich habe hinreichend deutlich in meiner Erklärung. Ich würde gerne wissen, wie numpy.gradient funktioniert und ob es die richtige Wahl für mein problem. Ansonsten würde ich gerne wissen, ob es andere python-Funktion, die ich verwenden kann.

Was ich meine ist: ich möchte berechnen Steigung ein array von Werten:

data=[[x1,x2,x3]...[x1,x2,x3]]

wobei x1,x2 sind die Koordinaten der Punkte, die auf einem einheitlichen raster (meine Punkte der brillouin-zone) und x3 den Wert der Frequenz für diesen Punkt. Ich gebe im input auch die Schritte für die Ableitung für die 2 Richtungen:

stepx=abs(max(unique(data[:,0])-min(unique(data[:,0]))/(len(unique(data[:,0]))-1)

das gleiche für die y-Richtung.
Ich nicht bauen, meine Daten auf einem raster, ich habe schon ein Gitter und dieses ist der Grund, warum Art-Beispiele, die hier Antworten, tun mir nicht helfen.
Ein passenderes Beispiel sollte ein raster von Punkten und Werten, wie ich Sie haben:

data=[]
for i in range(10):
  for j in range(10):
    data.append([i,j,i**2+j**2])

data=array(data,dtype=float)

gx,gy=gradient(data)

andere Sache, die ich hinzufügen kann ist, dass mein raster ist nicht ein Quadrat, sondern hat die Form eines Polygons wird die brillouin-zone von einem 2d-Kristall.

Habe ich verstanden, dass numpy.gradient funktioniert nur auf einem quadratischen raster von Werten, nicht das, was ich searchin für. Auch wenn ich meine Daten als raster, das hätte viel Nullen außerhalb des Polygons von meinem ursprünglichen Daten, das wäre wirklich high-Vektoren, um meinen Verlauf zu beeinflussen (negativ) der die Genauigkeit der Berechnung. Dieses Modul scheint mir mehr ein Spielzeug als ein Werkzeug, es hat starke Einschränkungen imho.

Problem gelöst mit Wörterbüchern.

  • Soooo, was ist die Frage? Welche module sollte man verwenden? Ist etwas schiefgegangen?
  • Frage ist, was Farbverlauf tun? Warum gibt mir 2 3d-Vektoren anstelle von 1-2d-Vektor? Tun Verlauf tatsächlich compute wirklich ein Farbverlauf? Von der Ausgabe kann ich nicht sagen. Sieht nicht genau auf mich zu.
  • Ich dachte, es war klar, der 3. Teil meiner Eingabe ist das Skalare Feld, jeder Wert auf der 3. Komponente ist der Wert der Funktion für jedes (x,y) zeigen.
  • das problem ist, dass Sie geben gradient die falsche Eingabe. Es kümmert sich nicht um x1,x2 oder im letzten Beispiel i,j. Es will nur eine matrix von i**2+j**2 Werte. Es ist implizit, dass Sie Ihre matrix der i**2+j**2 Werte entsprechen den xy Ebene, und die optionalen skalaren Argumente, die von gradient Konto für Schritt Größe Annahmen, d.h. wenn Ihr x Punkte sind nicht 1 entfernt von einander, und das gleiche für Ihre y Punkte. Ich werde aus der Stadt heute, aber ich werde aktualisieren, meine Antwort, wenn ich wieder heute Abend.
Schreibe einen Kommentar