numpy.gradient
Verfasst: Mittwoch 10. März 2010, 15:09
Hallo zusammen
Ich möchte zu Übungszwecken eine Figur wie unter diesem Link zu sehen erstellen:
http://www.mathworks.com/access/helpdes ... dient.html
(bisschen nach unten scrollen).
Es geht mir darum, mit Python ein (vorläufig mal) zweidimensionales Skalarfeld zu berechnen (f(x,y) = x^2 * y^2).
Auf dieses Skalarfeld wende ich den Gradientoperator an (numpy.gradient). Numpy.gradient(scalarfield) gibt mir ja ein Vektorfeld mit den Gradientenvektoren zurück, die auf irgendeine Art berechnet wurden. Wenn ich den Output richtig verstehe, bekomme ich zwei Koordinaten-Sets zurück, numpy.gradient(skalarfeld)[0] alle x-Koordinaten und numpy.gradient(skalarfeld)[1] alle y-Koordinaten.
Die Richtung des Gradientenvektors an einem bestimmten Punkt gibt die Richtung des steilsten An-stiegs an und der Betrag des Vektors die Steigung.
Hier ist mein Skript, es ist mir klar, dass einiges wohl suboptimal ausgeführt wurde.
Ich mache eigentlich alles was mit Darstellung von Daten zu tun hat mit GNUPLOT. Deshalb möchte ich jetzt die Vektoren als Pfeile in Gnuplot darstellen. Wie könnte ich das am besten machen?
Vielen Dank für Hinweise
Ich möchte zu Übungszwecken eine Figur wie unter diesem Link zu sehen erstellen:
http://www.mathworks.com/access/helpdes ... dient.html
(bisschen nach unten scrollen).
Es geht mir darum, mit Python ein (vorläufig mal) zweidimensionales Skalarfeld zu berechnen (f(x,y) = x^2 * y^2).
Auf dieses Skalarfeld wende ich den Gradientoperator an (numpy.gradient). Numpy.gradient(scalarfield) gibt mir ja ein Vektorfeld mit den Gradientenvektoren zurück, die auf irgendeine Art berechnet wurden. Wenn ich den Output richtig verstehe, bekomme ich zwei Koordinaten-Sets zurück, numpy.gradient(skalarfeld)[0] alle x-Koordinaten und numpy.gradient(skalarfeld)[1] alle y-Koordinaten.
Die Richtung des Gradientenvektors an einem bestimmten Punkt gibt die Richtung des steilsten An-stiegs an und der Betrag des Vektors die Steigung.
Hier ist mein Skript, es ist mir klar, dass einiges wohl suboptimal ausgeführt wurde.
Ich mache eigentlich alles was mit Darstellung von Daten zu tun hat mit GNUPLOT. Deshalb möchte ich jetzt die Vektoren als Pfeile in Gnuplot darstellen. Wie könnte ich das am besten machen?
Code: Alles auswählen
#!/usr/bin/env python
import numpy
#Filling a list with the values of f(x) = x^2*y^2.
mult = numpy.zeros((5, 5))
data = open('mult.dat', 'w')
data.write('')
data.close()
datag = open('multgrad.dat', 'w')
datag.write('')
datag.close()
print mult
for i in range(len(mult)):
for j in range(len(mult[i])):
mult[i][j] += (i/10.)**2 * (j/10.)**2
data = open('mult.dat', 'w')
datag = open('multgrad.dat', 'w')
multgrad = numpy.gradient(mult)
print mult
print multgrad
for i in range(len(mult)):
for j in range(len(mult[i])):
data.write(str(i) + ' ' + str(j) + ' ' + str(mult[i][j]) + ' ' + '\n')
data.close()
datag.close()