2016-07-10 12 views
0

Ich finde Eigens Syntax mühsamer als die anderen numerischen linearen Algebra-Bibliotheken, mit denen ich gearbeitet habe: numpy, MATLAB und Gürteltier. Also schreibe ich eine Reihe von "Helfer" -Funktionen, die Eigens Syntax erweitern. (Siehe an earlier question of mine)Erweitern von Eigen mit besserer Syntax/Benennung

Meine Frage ist, ist das nicht schon getan worden?

Ich weiß, dass libigl have added some MATLAB-esque function s, aber ich frage mich, ob es mehr gibt?

Ich versuche, das Rad hier nicht neu zu erfinden.

einige Beispiele zu nennen:

swap_rows(i, j), swap_cols(i, j), reshape, koeffizientenweise Funktionen wie abs, log usw.

Ich versuche, mehr lesbaren Code zu schreiben.

Antwort

1

Matlab und numpy haben nicht das Konzept des Ausdrucks, ihre Funktion arbeitet immer auf einer realen Matrix, entweder einer Matrix, die von Ihnen selbst oder einem Temp-Puffer erstellt wurde. Eigen verwendet andererseits Vorlagenausdrücke, um den temporären Speicherpuffer zu vermeiden. Seine Funktionen sollten sowohl auf Matrizen als auch auf Ausdrücken funktionieren, deshalb sind Funktionen wie reshape wahrscheinlich nicht implementiert. Eigen neigt dazu, die Funktionen, die einen temporären Puffer erfordern, den Benutzern zu überlassen, damit sie kontrollieren können, wann und wo ein Puffer erscheint.

Koeffizienten weise Funktionen sind bereits da. Weitere Informationen finden Sie unter folgendem Link.

http://eigen.tuxfamily.org/dox/group__QuickRefPage.html

+0

Danke, aber ich sage nicht, das Zeug ist nicht da. Ich sage, dass die Syntax nicht ansprechend ist. Ich kann nicht die erste Person sein, die nicht "myvecarray(). Abs()" schreiben möchte, wenn es genauso gut "abs (myvec)" sein könnte. Gleiches gilt für 'swap': Ich finde es viel schwieriger,' A.row (i) .swap (A.row (j)) 'als' A.swap_rows (i, j) 'oder sogar' swap_rows (A , i, j) '. Ich bin auf der Suche nach einer dünnen Schicht von netten Syntax auf Eig. –

+1

@krey 'myvec.cwiseAbs()' wird besser sein. Über '.abs()' vs. 'abs (...)' bevorzuge ich die erste, da sie objektorientiert ist. 'A.row (i) .swap (...)' ist auch objektorientiert (beginnend mit einem Objekt 'A' und nicht mit einem Befehl' swap'). Es kann auch mit jedem Vektor "..." ausgetauscht werden, nicht nur eine weitere Zeile. Grundsätzlich kann man nicht sagen, wessen Syntax besser ist. Sie können nur sagen, wessen Syntax Matlab ähnlicher ist. – kangshiyin

+0

OK, also suche ich nach etwas, das es eher wie MATLAB aussehen lässt;) –