2013-08-21 12 views
9

Ich bin auf der Suche nach einer Möglichkeit, Matrix-Operationen in PHP auf eine einfache/effiziente Weise zu tun.Wie man PHP Matrix Operationen auf eine einfache/effiziente Weise macht

Ich möchte die grundlegenden Matrix Operationen wie invertieren, Multiplizieren, Gebender in der Lage sein zu tun, addieren, subtrahieren, Lösen von linearen Gleichungen Ax = B, Transponierung usw.

ich bei kleiner Größe Matrizen suchen (Die Matrix, die ich invertieren möchte, ist höchstens 100x100, und die Vektoren, die ich multiplizieren/transponieren möchte, können 1000x1) werden.

Ich fand ein PEAR-Paket Math_Matrix, aber es scheint vernachlässigt (ich entwickle mit E_STRICT und es wirft viele veraltete Warnungen). Die anderen Links, die ich gefunden habe, scheinen größtenteils kaputt und nicht aktualisiert zu sein.

Ich fand das Lapack PHP-Paket, aber es hat keine anderen Operationen wie Multiplikation oder Subtraktion oder Transponieren.

Ich weiß, eine andere Option ist die Integration mit anderer Software wie Octave oder Sage, aber wir sind nicht ganz sicher, ob wir das noch tun wollen (das Finanzteam verachtet die Python-Syntax und das IT-Team ist besorgt über den Octave-Overhead)).

Gibt es eine eigenständige Bibliothek, die für diese Art von Matrixoperationen verwendet wird, die alle grundlegenden Operationen enthält und aktualisiert wird?

+0

Ein PHP-Port von JAMA eine andere ist, ich weiß, dass sicherlich einige dieser Operationen hat, aber wahrscheinlich ebenso datiert. Michael Bommarito hat dafür ein [polyfit add-on] (http://php.livejournal.com/270125.html) gemacht, das auch nützlich sein kann. Jedoch sollte jede dieser älteren Bibliotheken Ihnen den Mut zur Mathematik geben. –

+0

Aus der Sicht von Octave/Sage wäre es sehr hilfreich, genau zu wissen, welche Matrizen Sie betrachten. Ich nehme an, dass es sich um Gleitkommazahlen handelt, und dass sie nicht die Art sein werden, die für die Inversion numerisch schlecht konditioniert sind.Die Verwendung von numpy (mit oder ohne Sage) könnte eine Option sein - aber auch hier wäre es hilfreich, die Frage mit einem bestimmten Beispiel (vielleicht einem Link dazu) zu aktualisieren. Natürlich ist R eine andere Option. – kcrisman

+0

Ich habe noch keine Beispielmatrix zu zeigen. Wir erhöhen nur die Anforderungen/Lösungen für das kommende Projekt =/Aber ja, sie sind sicher Float-Nummern. – Jimmy

Antwort

2

Werfen Sie einen Blick auf http://projects.moongate.ro/octave-daemon/

Einige der Funktionen, die Overhead reduzieren und das IT-Team überzeugen:

  • Der Daemon ist übers Netzwerk, was bedeutet, können Sie alle Octave Prozesse weitergehen einen separaten Server, falls Sie sich entschließen sollten

  • Octave-Prozesse sind persistent, was bedeutet, dass alle Daten, die in der Vergangenheit geladen oder berechnet wurden, immer noch für neu verbundene c verfügbar sind lienten

  • Startzeiten für neue Octave-Prozesse haben keine Auswirkungen auf Clients.

  • Bietet Konvertierungen zwischen Oktavmatrizen und PHP-Arrays.

+0

Ich habe dies vor einer Weile beim googeln zum gleichen Thema gefunden. Hast du es in der Produktion benutzt? Ist es zuverlässig und ohne Speicherlecks? – Jimmy

+0

Nein, ich habe es nicht benutzt, aber einige der Features sind interessant. Ich würde den Daemon auf seinen eigenen Server mit optimierter Hardware für Octave setzen. Machen Sie diesen Server für das Internet unzugänglich und behalten Sie ihn im selben Netzwerk wie der Webserver. Das sollte Probleme minimieren. –

0

Ich beantworte meine eigene Frage etwa ein Jahr später.

Wir gingen für eine andere Option, wir codierten unsere eigene kleine Bibliothek in C++ und wir kompilierten es und fügten es als Erweiterung php hinzu. Dies ergab die beste Leistung und der Code blieb schön.

$inverted = my_matrix_invert($matrixArray); 

Menschen suchen diese Art von Dingen tun sollte hier aussehen: http://www.php-cpp.com