Miglior C ++ Biblioteca Matrix per le matrici unitarie sparse
-
19-09-2019 - |
Domanda
Sto cercando una buona (nel migliore dei casi attivamente mantenuta) libreria C ++ matrice. In tal modo si deve templato, perché voglio usare un complesso di razionali come tipo numerico. Le matrici che cosa sto occupando sono principalmente radi e unitario.
Potete suggerire prego librerie e anche dare una piccola spiegazione per questo di usarli, perché so come trovarli, ma non si può davvero decidere che cosa è adatto per me, perché mi manca l'esperienza con loro.
EDIT:
I principali operazioni sto occupando sono moltiplicazione matriciale , moltiplicazione scalare con un vettore e prodotto di Kronecker . La dimensione delle matrici è esponenziale e voglio almeno essere in grado di affrontare le matrici fino a 1024x1024 voci.
Soluzione
Molte persone che fanno cose matrice "seria", si basano su BLAS , l'aggiunta di LAPACK / ATLAS (matrici normali) o UMFPACK (sparso matrici) per la matematica più avanzata. La ragione è che questo codice è ben testato, stabile, affidabile, e abbastanza veloce. Inoltre, è possibile acquistare direttamente da un fornitore (ad esempio, Intel MKL ) sintonizzato verso l'architettura, ma anche di ottenere gratuitamente. uBLAS menzionato in di Manuel risposta è probabilmente l'implementazione standard C ++ BLAS. E se avete bisogno di qualcosa di simile LAPACK più tardi, ci sono attacchi per farlo.
Tuttavia, nessuna di queste librerie standard (BLAS / LAPACK / ATLAS o uBLAS + attacchi + LAPACK / ATLAS) zecche tua casella per essere basato su modelli e facile da usare (a meno che non uBLAS è tutto ciò che mai bisogno). A dire il vero, devo ammettere, che io tendo a chiamare l'interfaccia C / Fortran direttamente quando uso un'implementazione BLAS / LAPACK, dal momento che spesso non vedo molto ulteriore vantaggio nella combinazione uBLAS + attacchi.
Se ho bisogno di un semplice da usare, general-purpose libreria matrice C ++, tendo a usare Eigen (ho usato per usare NEWMAT in passato) . Vantaggi:
- abbastanza veloce su architettura Intel, probabilmente il più veloce per le matrici più piccole
- bella interfaccia
- quasi tutto ciò che ci si aspetta da una libreria di matrice
- è possibile aggiungere facilmente nuovi tipi
Gli svantaggi (IMO):
- monoprocessore [ Modifica parzialmente fissato Eigen 3.0 ]
- più lento per le matrici più grandi e un po 'di matematica avanzata di ATLAS o Intel MKL (ad esempio decomposizione LU) [ Modifica anche migliorata in Eigen 3.0]
- solo il supporto sperimentale per matrici sparse [ Modifica migliorato nella prossima versione 3.1].
Modifica La prossima Eigen 3.1 permette alcune funzioni di utilizzare il processore Intel MKL (o qualsiasi altra applicazione BLAS / LAPACK)
.Altri suggerimenti
Boost uBLAS , perché è passato il filtro Boost.
Ci sono alcune librerie di modelli che supportano matrici sparse, quindi è davvero difficile trovare una spiegazione razionale migliore se non sei più specifiche sulle vostre esigenze.