2011-02-02 12 views
17

Sto iniziando un nuovo progetto di calcolo scientifico in C++ e dal momento che sono incluse molte procedure numericamente estese, sto considerando di utilizzare alcuni Armadillo o Blitz ++ per una gestione efficace dell'array/matrice/tensore. Quale è meglio usare?Armadillo vs. Blitz ++

+0

Hai davvero ** bisogno di un sacco di algebra lineare? Se sì, non usare C++ (usare Matlab o equivalente). Se no, Armadillo ha un bell'aspetto e se davvero devi usare C++ a causa di un altro requisito, è probabilmente l'opzione migliore.Tuttavia, non l'ho mai usato per dirlo (ho usato Blitz ++ e boost :: ublas con un po 'di delusione). –

+0

Hai dato un'occhiata alla libreria Boost Math e Numerics (http://www.boost.org/doc/libs/?view=category_Math)? – yasouser

+1

"Qual è il migliore": meglio come - velocità non elaborata (sulla * classe * di problemi), stabilità, ** tempo di apprendimento **? Mi piacerebbe un tavolino con numeri: pagine di documenti, righe di esempi, linee di codice, per confronti di questo tipo. – denis

risposta

17

Siamo stati molto soddisfatti Armadillo che abbiamo avvolto a R usando l'/ C pacchetto di integrazione Rcpp R ++ --- pacchetto risultante è RcppArmadillo.

Conrad è molto utile e impegnato e Armadillo è in fase di sviluppo. Ho capito che Blitz ++, pur essendo al tempo stesso path-breaking e molto influente per l'algebra lineare basata su modelli, non è più attivamente sviluppato.

Modifica 2012-06-28: Apparentemente è in corso lo sviluppo di Blitz ++ in corso allo Sourceforge site for Blitz.

Modifica 2017-12-16: Sembra che Blitz++ sia ora su GitHub.

+0

Qualcuno ha provato a modificare il tuo post ora dicendo che "Blitz ++ è ancora sviluppato e una nuova versione 0.10 è stata appena rilasciata oggi" - puoi confermare e se cambi davvero il tuo post? –

+0

@ShadowWizard: Grazie per l'avviso, ho appena effettuato la modifica dopo aver trovato il file. –

+1

Dirk, Blitz deve essere supportato. –

12

Come sempre in questo caso, quando si parla di algebra lineare e C++, suggerisco caldamente di dare un'occhiata a Eigen.

http://eigen.tuxfamily.org/index.php?title=Main_Page

Probabilmente uno dei migliori libreria di algebra lineare C++ mai scritte a mio parere.

+2

Attualmente sto lavorando con Eigen e ne sono abbastanza soddisfatto. –

+0

Proveniente da Matlab, Eigen sembra assolutamente incredibile! Quanto è robusto in termini di specificare un tipo di vettore personalizzato per ogni elemento in un array? Mi piacerebbe poterlo usare con le immagini a colori, cioè gli array "3D" di dimensione M * N * (rosso, verde, blu). –

+0

Ho trovato che [Armadillo] (http://arma.sourceforge.net) in generale fa un lavoro migliore con l'offerta di funzioni/API simili a Matlab. Per gli array "3D", ha la [classe Cube] (http://arma.sourceforge.net/docs.html#Cube). – mtall

4

Per completezza: raccomando fortemente contro Boost :: uBLAS, nel caso in cui qualcuno lo stia prendendo in considerazione. L'ho usato e l'API è ingombrante e le prestazioni sono complessivamente inferiori a Eigen e Armadillo; questo è anche menzionato nella sezione FAQ di uBLAS

D: Dovrei usare uBLAS per nuovi progetti?

A: Al momento della scrittura (09/2012) ci sono un sacco di buone biblioteche matrice disponibili, ad esempio, MTL4, armadilli, Eigen ... uBLAS offre una buona (ma non eccezionale) le prestazioni. Dall'altro lato, l'ultimo importante miglioramento di uBLAS risale al 2008 e nessun cambiamento significativo è stato commesso dal 2009. Pertanto, è necessario porsi alcune domande per aiutare la decisione: ... Facile da usare? uBLAS è facile da usare per cose semplici, ma ha bisogno di conoscenza C++ decente quando si lascia il percorso. Prestazione? Ci sono alternative più veloci. Bordo tagliente? uBLAS ha più di 10 anni e ha perso tutte le novità dal C++ 11.

"Sto iniziando un nuovo progetto scientifico-informatica ..."

Armadillo API cerca di imitare la sintassi MATLAB, che vorrei assumere sei a conoscenza.

0

Una cosa che ho incontrato lavorare con uBLAS è che non fornisce l'opzione di fare un'operazione come max(u,0), u+1, abs(u) dove u è un vettore. Inoltre, la sintassi di Boost Ublas è scomoda da scrivere rispetto a ARMADILLO. C'è anche un confronto di velocità [click] (Compare blitz++, armadillo, boost::MultiArray) Quindi, raccomando Armadillo.

Problemi correlati