2013-08-21 10 views
9

Sto cercando un modo per eseguire operazioni Matrix in PHP in modo semplice ed efficiente.Come eseguire le operazioni Matrix PHP in modo semplice ed efficiente

Voglio essere in grado di fare le operazioni di base come Matrix Inverti, Moltiplica, Determinante, aggiungere, sottrarre, Solving Equazioni lineari Ax = B, trasporre, ecc

sto guardando matrici di piccole dimensioni (La matrice che voglio inversione è al massimo 100x100, e i vettori che voglio moltiplicare/trasporre possono arrivare ad essere 1000x1).

Ho trovato un pacchetto PEAR Math_Matrix ma sembra trascurato (sviluppo con E_STRICT e genera molti avvisi deprecati). Gli altri link che ho trovato sembrano per lo più rotti e non aggiornati.

Ho trovato il pacchetto Lapack PHP ma non ha altre operazioni come la moltiplicazione, la sottrazione o la trasposizione.

Conosco un'altra opzione è quella di utilizzare l'integrazione con altri software come Octave o Sage ma non siamo sicuri di volerlo fare ancora (il team finanziario disprezza la sintassi Python e il team IT è preoccupato per l'overhead di Octave).

Esiste una libreria autonoma che chiunque utilizza per questo tipo di operazioni con matrice che ha tutte le operazioni di base ed è aggiornata?

+0

Una porta PHP di JAMA è un altro so che ha certamente alcune di queste operazioni, ma probabilmente altrettanto datato. Michael Bommarito ha fatto un [polyfit add-on] (http://php.livejournal.com/270125.html) che potrebbe anche essere utile. Comunque, una di quelle vecchie librerie dovrebbe darti il ​​coraggio della matematica –

+0

Dal punto di vista di Octave/Sage, penso che sarebbe molto utile sapere esattamente quale tipo di matrici stai guardando. Presumo che siano di numeri in virgola mobile e che non saranno il tipo che sono mal condizionati per l'inversione numerica.Usare numpy (con o senza Sage) potrebbe essere un'opzione - ma ancora una volta, l'aggiornamento della domanda con un esempio specifico (forse un collegamento ad esso) sarebbe davvero utile. Naturalmente, R è un'altra opzione. – kcrisman

+0

Non ho ancora una matrice campione da mostrare. Stiamo solo aumentando i requisiti/le soluzioni per il prossimo progetto =/Ma sì, sono sicuramente numeri float. – Jimmy

risposta

2

Date un'occhiata a http://projects.moongate.ro/octave-daemon/

Alcune delle caratteristiche che possono ridurre il sovraccarico e convincere il team IT:

  • Il demone è accessibile via rete, il che significa che è possibile spostare tutti i processi di ottava su un server separato, in caso di necessità è necessario

  • I processi di ottava sono persistenti, il che significa che: tutti i dati che sono stati caricati o calcolati in passato saranno ancora disponibili per i nuovi collegamenti c lients

  • I tempi di avvio per i nuovi processi Octave non influiscono sui client.

  • Fornisce conversioni tra le matrici Octave e gli array PHP.

+0

L'ho trovato qualche tempo fa mentre facevo ricerche su Google sullo stesso argomento. L'hai usato in produzione? È affidabile e senza perdite di memoria? – Jimmy

+0

No, non l'ho usato, ma alcune delle funzionalità sono interessanti. Metterei il demone sul proprio server con hardware ottimizzato per l'esecuzione di Octave. Rendi questo server inaccessibile a Internet e tienilo nella stessa rete del server web. Questo dovrebbe minimizzare i problemi. –

0

Sto rispondendo alla mia domanda circa un anno dopo.

Abbiamo optato per un'altra opzione, abbiamo codificato la nostra piccola libreria in C++ e l'abbiamo compilata e aggiunta a php come estensione. Questo ha prodotto le migliori prestazioni e il codice è rimasto piuttosto carino.

$inverted = my_matrix_invert($matrixArray); 

Persone in cerca di fare questo tipo di cose dovrebbe guardare qui: http://www.php-cpp.com