问题
Does anyone know good scalable implementation of SVD on C# for very big matrix?
回答1:
ILNumerics.net seems to have SVD among other things.
Feature list:
Frameworks
.NET 1.1, .NET 2.0, available soon: mono 1.2.3
Languages
all CLI conform: C# (recommended), managed C++, Visual Basic ...
Array objects
* Full OO class design * Generic typed container classes * single object for arbitrary array dimensions: scalar, vector, matrices, n-dim arrays * full support for flexible array modification: subarray-/ creation, concatenation, dimension removal, serialization * automated reference management: copy memory only if really needed * support for cells and logical arrays
Numerics
* Supports all numeric types as array elements: double, float, complex, fcomplex, int16, int32,
int64, uint16, uint32, uint64, char, byte, bool * operator overloads (A + B,...) * static operator functions (f.e. Add(a,b)) * support for special numeric states (NaN, +/-Inf)
Processor specific optimizations
* BLAS, LAPACK * AMD: ACML, Intel: MKL, general: netlib * Automated detection
Algebraic functions
* abs * acos * add * all * any * asin * (more...)
Linear algebra
* matrix multiply, -inverse, -pseudo inverse * linear equation solver * decompositions: LU,QR,SVD,Cholesky * eigenvalues, eigenvectors
Fourier transforms
* 1,2,3...n dimensional * transforms forward & backwards * supported libraries: Intel MKL, AMD ACML, FFTW3 * 100% octave/Matlab/Scilab compatible interface
Sorting
* Sorting of strings (lexicographical, bucket sort) * Sorting of numeric data (quick sort) * generic sorting of arbitrary user defined types by definable keymapper (bucket sort)
Error handling
* typed exceptions
Algorithm base classes
* synchronous / asynchronous * easily extendable for user defined derived algorithms * full Windows.Forms.Control compatible multiple thread eventing
support
Visualizations
* Plot panels, derived from Windows.Forms.Control * Plot dialog forms * 1D, 2D, 3D data plots * Based on OpenGL. (DirectX: deprecated) * Highly configurable graphs/figure properties * Automatic user interaction: rotation, zoom, auto axis scaling
Miscellaneous
* Visual Studio 2005(R) AddIn: extends watch tool window * import from / export to Matlab(R) *.mat files * syntax vastly compatible to Matlab(R) (function naming, parameter) * determination of extended machine properties, numerical constants * Memory pool: automated recycling of large objects
回答2:
We have used the NAG library quite successfully with "big" matrixes (4000x4000).
It is not managed code, but using P/Invoke we had no issues.
There are version for 32bit and 64bit Windows (also a couple of UNIX variants). And there are special MKL (Intel Math Kernel Library) and AMCL (AMD Math Core Library) versions, which are supposed to better use multiple processors on x64 systems.
It is not free either, if that is an issue.
来源:https://stackoverflow.com/questions/2552535/svd-algorithm-implementation