SVD algorithm implementation

我们两清 提交于 2019-12-23 15:59:33

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!