2013-08-21 19 views
9

Szukam sposobu na wykonywanie operacji Matrix w PHP w łatwy/skuteczny sposób.Jak wykonywać operacje macierzy PHP w prosty/skuteczny sposób

Chcę być w stanie wykonać podstawowe operacje Matrix jak inwertowany, mnożenie, wyznacznik, dodawanie, odejmowanie, Rozwiązywanie równań liniowych Ax = B, transpozycji itd

Patrzę na małych rozmiarach matryc (Matryca, którą chcę odwrócić, wynosi co najwyżej 100x100, a wektory, które chcę pomnożyć/przetransponować, mogą osiągnąć 1000x1).

Znalazłem PEAR pakiet Math_Matrix, ale wydaje się zaniedbane (rozwijam się z E_STRICT i rzuca wiele przestarzałych ostrzeżeń). Inne znalezione linki wydają się być w większości zepsute i nieaktualne.

Znalazłem pakiet Lapack PHP, ale nie ma innych operacji, takich jak mnożenie lub odejmowanie lub transpozycja.

Wiem, że inną opcją jest użycie integracji z innym oprogramowaniem, takim jak Octave lub Sage, jednak nie jesteśmy do końca pewni, czy chcemy to zrobić (zespół finansowy pogardza ​​składnią Pythona i zespołem IT, który martwi się o nadejście Octave).

Czy istnieje samodzielna biblioteka, którą każdy używa do tego rodzaju operacji macierzy, która ma wszystkie podstawowe operacje i jest aktualizowana?

+0

PHP port JAMA jest inny wiem, że na pewno ma jedne z tych operacji, ale prawdopodobnie równie przestarzałe. Michael Bommarito zrobił dla niego [dodatek polyfit] (http://php.livejournal.com/270125.html), który może być przydatny. Jednak każda z tych starszych bibliotek powinna dać ci odwagę z matematyki. –

+0

Z punktu widzenia Oktawy/Mędrca, naprawdę dobrze byłoby wiedzieć dokładnie, na jakie macierze patrzysz. Zakładam, że są liczbami zmiennoprzecinkowymi, i że nie będą one tymi rodzajami, które nie są źle przystosowane do inwersji liczbowo.Używanie numpy (z Sage'em lub bez) może być opcją - ale znowu aktualizacja pytania za pomocą konkretnego przykładu (być może link do niego) byłaby naprawdę pomocna. Naturalnie R jest inną opcją. – kcrisman

+0

Nie mam jeszcze matrycy próbnej do pokazania. Po prostu podnosimy wymagania/rozwiązania dla nadchodzącego projektu =/Ale tak, na pewno są to liczby zmiennoprzecinkowe. – Jimmy

Odpowiedz

2

Spójrz na http://projects.moongate.ro/octave-daemon/

niektóre z cech, które mogą zmniejszać narzut i przekonać zespół IT:

  • demon jest dostępny za pośrednictwem sieci, co oznacza, że ​​można przenieść wszystkie procesy Octave na oddzielny serwer, jeśli zdecydujesz, że musisz

  • Procesy oktawowe są trwałe, co oznacza, że: wszelkie dane, które zostały załadowane lub obliczone w przeszłości, będą nadal dostępne dla nowo połączonych c Klienci

  • czasy uruchamiania nowych procesów Octave nie mają wpływu na klientów.

  • Umożliwia konwersję między macierzami Octave i tablicami PHP.

+0

Znalazłem to jakiś czas temu podczas googlowania na ten sam temat. Użyłeś go w produkcji? Czy jest niezawodny i nie ma wycieków pamięci? – Jimmy

+0

Nie, nie użyłem go, ale niektóre funkcje są interesujące. Umieściłbym demona na jego własnym serwerze ze zoptymalizowanym sprzętem do uruchamiania Octave. Spraw, aby ten serwer był niedostępny w Internecie i pozostaw go w tej samej sieci co serwer sieciowy. To powinno zminimalizować problemy. –

0

Odpowiadam na moje własne pytanie około roku później.

Poszliśmy na inną opcję, zakodowaliśmy naszą własną małą bibliotekę w C++ i skompilowaliśmy ją i dodaliśmy do php jako rozszerzenie. To zapewniło najlepszą wydajność, a kod zachowywał się ładnie.

$inverted = my_matrix_invert($matrixArray); 

Ludzie chcą robić tego typu rzeczy powinny wyglądać tutaj: http://www.php-cpp.com