Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which numerical library to use for porting from Matlab to C++? [closed]

I am currently prototyping some algorithms in Matlab that rely on matrix, DSP, statistics and image analysis functionality.

Some examples of what I may need:

  • eigenvectors
  • convolution in 2D and 3D
  • FFT
  • Short Time Fourier Transform
  • Hilbert transform
  • Chebyshev polynomials
  • low pass filter
  • random multivariate gaussian numbers
  • kmeans

Later on I will need to implement these algorithms in C++.

I also have a license for Numerical Recipes in C++, which I like because it is well documented and have a wide variety of algorithms. I also found a class that helps with wrapping NR functions in MEX:nr3matlab.h. So using this class I should be able to generate wrappers that allow me to call NR functions from Matlab. This is very important to me, so that I can check each step when porting from Matlab to C++. However Numerical Recipes in C++ have some important shortcomings:

  • algorithms implemented in a simple, and not necessarily very efficient manner
  • not threaded

I am therefore considering using another numerical library. The ideal library should:

  • be as broad in scope and functionality as possible
  • be well documented
  • (have commercial support)
  • have already made Matlab wrappers
  • very robust
  • very efficient
  • threaded
  • (have a GPU implementation that can be turned on instead of the CPU with a "switch")

Which numerical library (libraries) would you suggest?

Thanks in advance for any answers!

like image 716
Andy Avatar asked Feb 08 '12 16:02

Andy


Video Answer


1 Answers

You have a pretty long list of requirements, and it may be challenging to cover them all with a single library.

For general Matlab-to-C++ transitions, I can highly recommend Armadillo which is a templated C++ library with a focus on linear algebra --- and a given focus on making it easy to write Matlab-alike expression. It as very good performance, is very well documented and actively maintained. You could start there and try to fill in the missing pieces for your task.

like image 56
Dirk Eddelbuettel Avatar answered Oct 20 '22 13:10

Dirk Eddelbuettel