Berechnung von Jacobi Matrix numpy 2 sympy?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ines
User
Beiträge: 7
Registriert: Sonntag 11. September 2016, 19:30

Hallo liebe Leute,

ich versuche seit einiger Zeit die Jacobi Matrix zu berechnen. Dafür ist ja ein sympy Objekt gut geeignet.
Das Problem ist aber, dass ich meine Matrix als numpy deklarieren muss um sie in warpAffine() benutzten zu dürfen.
Gibt es irgendwie ein Trick, die Matrix umdefinieren zu lassen ?

Hier ist mein Code:

Code: Alles auswählen


b1=0;
b2=0;
p=sp.Matrix([b1, b2])
#wrap
W_p = np.float32([ [1,0,b1], [0,1,b2] ])
W_psp = sp.Matrix( [[1,0,b1], [0,1,b2]])

W_psp.jacobian(p)

jetzt möchte ich gerne die Jacobi Matrix von W_p bzw. von W_psp berechnen.
Da es nur mit sympy geht, habe ich mir üebrlegt die gleiche Matrix einfach 2 mal deklarieren zulassen einmal unter numpy und einmal unter sympy. Dazu hätte ich 2 Fragen und zwar:
1) geht das nicht dass man direkt die Jacobi Matrix von einem Numpy berechnet? Kann man NUumpy in sympy umdeklarieren lssen?
2) Angenommen es muss ein sympy sein: der Fehler by sympy, also W_psp.jacobian(p) ist : raise TypeError("self must be a row or a column matrix")
TypeError: self must be a row or a column matrix? Könnte man mir erklären wie ich p umschreiben soll damit es passt?

ich bedanke mich jetzt schon und verbleibe
mit besten Grüßen
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ines: was ist eine Jakobi-Matrix und wie wird sie berechnet?
BlackJack

@Ines: Also wenn ich das richtig sehe, dann ist die Jacobi-Matrix eine Matrix die aus Ableitungen einer Funktion erstellt wird. Insofern verstehe ich die Frage ob man das direkt von einem Numpy-Array aus machen kann nicht so ganz, denn ein Numpy-Array enthält konkrete Werte und keine Funktion(en). Deswegen ja auch Sympy, weil man dort symbolisch arbeitet, also mit Funktionen/Ausdrücken als Werten wovon man Ableitungen erstellen kann.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@BlackJack: sehr schöne Antwort auf meine Fragen. Das gibt ein Sternchen ins Heft. :wink:
Ines
User
Beiträge: 7
Registriert: Sonntag 11. September 2016, 19:30

BlackJack hat geschrieben:@Ines: Also wenn ich das richtig sehe, dann ist die Jacobi-Matrix eine Matrix die aus Ableitungen einer Funktion erstellt wird. Insofern verstehe ich die Frage ob man das direkt von einem Numpy-Array aus machen kann nicht so ganz, denn ein Numpy-Array enthält konkrete Werte und keine Funktion(en). Deswegen ja auch Sympy, weil man dort symbolisch arbeitet, also mit Funktionen/Ausdrücken als Werten wovon man Ableitungen erstellen kann.
Danke sehr Black Jack.. Also im Grunde genommen ergibt es kein Sinn eine Numpy Matrix differenzieren zu wollen! Verstehe.. dann versuche ich das by Sympy weiter.
Weißt du warum ich " raise TypeError("self must be a row or a column matrix")" immer wieder bekomme

Code: Alles auswählen


b1=0;  
b2=0;  
p=sp.Matrix([b1],
		  [b2])
#wrap

W_psp = sp.Matrix( [[1,0,b1], [0,1,b2]])

W_psp.jacobian(p)

also p ist heir doch eine Row Matrix oder?
danke sehr im Voraus
Ines
User
Beiträge: 7
Registriert: Sonntag 11. September 2016, 19:30

Sirius3 hat geschrieben:@BlackJack: sehr schöne Antwort auf meine Fragen. Das gibt ein Sternchen ins Heft. :wink:
Black Jack war schneller :)
Danke sehr Sirius3!
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ines: auch wenn Dir BlackJack die Antwort verraten hat, solltest Du selbst nochmal überlegen, was Du eigentlich erreichen willst. Man rechnet ja normalerweise keine Jakobi-Matrix aus, weil es so viel Spaß macht, sondern weil man ein Problem hat, dessen Lösung mit Hilfe einer Jakobi-Matrix besonders elegant ist.

Vorraussetzung ist, dass man eine vektorwertige Funktion hat: R^n -> R^m

Wenn Du also eine Jakobi-Matrix von irgendwelchen Konstanten berechnen willst, kommt immer eine 0-Matrix heraus, was wenig Sinn macht. Wie kommst Du also darauf, dass Du ein Problem hast, das die Verwendung einer Jakobi-Matrix notwendig macht?
Ines
User
Beiträge: 7
Registriert: Sonntag 11. September 2016, 19:30

Sirius3 hat geschrieben:@Ines: auch wenn Dir BlackJack die Antwort verraten hat, solltest Du selbst nochmal überlegen, was Du eigentlich erreichen willst. Man rechnet ja normalerweise keine Jakobi-Matrix aus, weil es so viel Spaß macht, sondern weil man ein Problem hat, dessen Lösung mit Hilfe einer Jakobi-Matrix besonders elegant ist.

Vorraussetzung ist, dass man eine vektorwertige Funktion hat: R^n -> R^m

Wenn Du also eine Jakobi-Matrix von irgendwelchen Konstanten berechnen willst, kommt immer eine 0-Matrix heraus, was wenig Sinn macht. Wie kommst Du also darauf, dass Du ein Problem hast, das die Verwendung einer Jakobi-Matrix notwendig macht?
@Sirius3: ich versuche nicht die Jacobi Matrix von Konstanten zu berechnen. p=[b1 b2] ist eine Matrix der Variablen b1 und b2, dass sie erstmal gleich 0 sind ist die Initialisierung. Ich versuche das Lukas Kanada Algorithmus zu implementieren und dafür brauche ich die Jacobi und Hessen Matrix.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ines: wenn ich den Lucas-Kanade-Algorithmus richtig verstanden habe, arbeitet er mit Differenzenquotienten einer Nachbarmatrix und einfacher Least-Square-Minimierung. Also weder Jacobi noch Hesse sind beteiligt. Willst Du dennoch die Jacobi-Matrix aus Differenzenquotienten berechnen, hilft die Sympy wenig weiter, da Sympy Dir nur die Bildung der Ableitungen abnimmt, was Du bei einem Differenzenquotienten selbst machen mußt.
Antworten