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 ++
risposta
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.
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? –
@ShadowWizard: Grazie per l'avviso, ho appena effettuato la modifica dopo aver trovato il file. –
Dirk, Blitz deve essere supportato. –
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.
Attualmente sto lavorando con Eigen e ne sono abbastanza soddisfatto. –
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). –
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
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.
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.
- 1. Il thread armadillo solve() è sicuro?
- 2. C++ armadillo - assegna i valori alla colonna
- 3. jini starter kit 2.1 per l'installazione di blitz javaSpaces
- 4. Armadillo, che trova l'indice massimo in ogni colonna
- 5. Armadillo porting imagesc per salvare l'immagine bitmap dalla matrice
- 6. C'è un modo per stampare una matrice Armadillo in gdb?
- 7. Armadillo C++: Esiste un modo specifico per creare una matrice triangolare o simmetrica efficiente
- 8. ID vs UniqueID vs ClientID vs UniqueClientID vs StaticClientID?
- 9. VS 2008 vs VS 2008 Express
- 10. .NET vs ASP.NET vs CLR vs ASP
- 11. Atomikos vs JOTM vs Bitronix vs?
- 12. Accumulare vs piega vs ridurre vs comprimere
- 13. ACE vs Boost vs Poco vs wxWidgets
- 14. VS 2013 MSTest vs nUnit vs xUnit
- 15. control.BeginInvoke() Vs Dispatcher Vs SynchronizationContext Vs .. - AFFIDABILITÀ
- 16. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 17. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, cosa hanno in comune?
- 18. e vs * e | vs +
- 19. SpiderMonkey vs JavaScriptCore vs?
- 20. * vs ** vs *** in Proguard?
- 21. bundler vs RVM vs gemme vs RubyGems vs gemsets vs system ruby
- 22. Misurare il tempo in Linux - tempo vs orologio vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
- 23. innerText vs innerHtml vs label vs text vs textContent vs outerText
- 24. Mathematica: non valutata vs Defer vs attesa vs HoldForm vs HoldAllComplete vs etc etc
- 25. Iterator vs. Reference vs. pointer
- 26. Selenium vs. SimpleTest vs. WatiN
- 27. BasicHttpBinding vs WsHttpBinding vs webHttpBinding
- 28. Boo vs C# vs Python?
- 29. StringBuffer vs StringBuilder Vs StringTokenizer
- 30. JSF vs Facelets vs JSP
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). –
Hai dato un'occhiata alla libreria Boost Math e Numerics (http://www.boost.org/doc/libs/?view=category_Math)? – yasouser
"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