2012-02-08 6 views
14

Attualmente sto prototipando alcuni algoritmi in Matlab che si basano su matrix, DSP, statistiche e funzionalità di analisi delle immagini.Quale libreria numerica utilizzare per il porting da Matlab a C++?

Alcuni esempi di quello che posso avere bisogno:

  • autovettori
  • convoluzione in 2D e 3D
  • FFT
  • Short Time Fourier Transform
  • trasformata di Hilbert
  • Chebyshev polinomi
  • filtro passa basso
  • numeri gaussiana multivariata casuali
  • Kmeans

Più tardi ho bisogno di implementare questi algoritmi in C++.

Ho anche una licenza per le Ricette Numeriche in C++, che mi piace perché è ben documentata e ha una grande varietà di algoritmi. Ho anche trovato una classe che aiuta con il wrapping delle funzioni NR in MEX: nr3matlab.h. Quindi, usando questa classe dovrei essere in grado di generare wrapper che mi permettano di chiamare funzioni NR da Matlab. Questo è molto importante per me, in modo che possa controllare ogni passaggio durante il porting da Matlab a C++. Tuttavia Numerical Recipes in C++ hanno alcuni importanti inconvenienti:

  • algoritmi implementati in modo semplice, e non necessariamente molto efficienti manner
  • non filettati

Sono quindi considerando se usare un'altra libreria numerica. La biblioteca ideale dovrebbe:

  • essere di ampia portata e funzionalità possibile
  • essere ben documentato
  • (avere il supporto commerciale)
  • hanno già fatto involucri Matlab
  • molto robuste
  • molto efficiente
  • filettato
  • (avere un'implementazione GPU che può essere attivata sul posto della CPU con un "interruttore")

Quale biblioteca numerica (librerie) suggerisce?

Grazie in anticipo per eventuali risposte!

+2

Elenca alcune funzioni/algoritmi specifici che stai cercando, in questo momento questa domanda è troppo vaga. –

+0

Grazie. Elencati alcuni che sono venuti in mente. – Andy

+0

Ho solo pensato di menzionare per riferimenti futuri che domande come questa trovano una buona casa su [scicomp.SE]. –

risposta

3

In realtà si dovrebbe dare un'occhiata a openCV.

Sebbene il suo primo obiettivo sia la visione computerizzata/l'elaborazione delle immagini, questa libreria ha molti strumenti di algebra lineare (quasi tutto ciò che si richiede). All'inizio, questa libreria è stata implementata da Intel, con molta attenzione alle prestazioni. Può gestire multi-thread, IPP, ... La sintassi è piuttosto semplice da usare rispetto alla solita libreria C++.

Si dovrebbe dare un'occhiata a questo cheat sheet. La sintassi è stata modificata dalla versione 2.0 per simulare il MATLAB. Questa libreria è ampiamente utilizzata e ben attiva (ultimo grande aggiornamento di agosto 2011).

+0

Sono sorpreso che tu abbia suggerito OpenCV invece di Eigen. – CroCo

3

NAG potrebbe essere una buona opzione. Carichi di istituzioni finanziarie lo usano nelle loro librerie matematiche. Non ho un'implementazione GPU, però, quando l'ho usata per l'ultima volta.

+0

Grazie. Sembra molto buono Sai approssimativamente quanto costa 1 licenza sviluppatore? – Andy

+0

@ Andreas Werner Paulsen - Google lo ha scoperto. http://www.eduserv.org.uk/lns/agreements/nag/nag-pricing. Non sei sicuro di quanto ti aiuti. Le istituzioni educative ricevono prezzi preferenziali, sembra dal loro sito web. – DumbCoder

4

Hai un elenco piuttosto lungo di requisiti e potrebbe essere difficile includerli tutti con una singola libreria.

Per le transizioni generali da Matlab a C++, posso raccomandare altamente Armadillo che è una libreria di C++ basata su modelli con un focus sull'algebra lineare --- e un dato di fatto su come semplificare la scrittura di espressioni simili a Matlab. È una prestazione molto buona, è molto ben documentata e attivamente mantenuta. Potresti iniziare da lì e provare a compilare i pezzi mancanti per il tuo compito.

+0

Grazie. Inoltre sembra molto buono. Mi piace soprattutto che sia basato su Lapack, mentre presenta un'interfaccia molto più semplice e simile a Matlab. – Andy

+0

Sopra BLAS, che è un'interfaccia. Quindi puoi sempre inserire BLAS più veloce invece di LAPACK predefinito. E Conrad conosce le sue cose ed è un piacere lavorare con lui. –

2

c'è anche la libreria Eigen: http://eigen.tuxfamily.org ma è usata principalmente come parte di un quadro più ampio. Offre un'algebra di base (e un po 'più complessa)

+0

È un tour de force di C++ templating, ma le compilazioni sono lente ei messaggi di errore possono essere terribilmente lunghi (terribili * e * lunghi). – denis