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.

È stato utile?

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.

Si dovrebbe anche provare MLT e HASEM Matrix C ++ Biblioteca. L'ultimo è molto ben documentato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top