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!
Actually you should have a look at openCV.
Although its first goal is computer vision/image processing, this library has a lot of linear algebra tools (Almost all that you ask for). At first, this library has been implemented by intel, with a lot of focus on performance. It can handle multi thread, IPP,…
The syntax is rather easier to use than usual C++ library.
You should have a look at this cheat sheet. The syntax has been changed since version 2.0 to mimic matlab.
This library is broadly used, and well active (last big update August 2011).