非常に大きな行列に対するC#でのSVDのスケーラブルな実装を知っている人はいますか?
2 に答える
ILNumerics.netには特に SVD があるようです。
フレームワーク
.NET 1.1、.NET 2.0、まもなく利用可能: mono 1.2.3
言語
すべての CLI 準拠: C# (推奨)、マネージ C++、Visual Basic ...
配列オブジェクト
* 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
数値
* Supports all numeric types as array elements: double, float, complex, fcomplex, int16, int32,
int64、uint16、uint32、uint64、char、byte、bool * 演算子のオーバーロード (A + B、...) * 静的演算子関数 (fe Add(a,b)) * 特殊な数値状態のサポート (NaN、+/- Inf)
プロセッサ固有の最適化
* BLAS, LAPACK * AMD: ACML, Intel: MKL, general: netlib * Automated detection
代数関数
* abs * acos * add * all * any * asin * (more...)
線形代数
* matrix multiply, -inverse, -pseudo inverse * linear equation solver * decompositions: LU,QR,SVD,Cholesky * eigenvalues, eigenvectors
フーリエ変換
* 1,2,3...n dimensional * transforms forward & backwards * supported libraries: Intel MKL, AMD ACML, FFTW3 * 100% octave/Matlab/Scilab compatible interface
並べ替え
* Sorting of strings (lexicographical, bucket sort) * Sorting of numeric data (quick sort) * generic sorting of arbitrary user defined types by definable keymapper (bucket sort)
エラー処理
* typed exceptions
アルゴリズム基本クラス
* synchronous / asynchronous * easily extendable for user defined derived algorithms * full Windows.Forms.Control compatible multiple thread eventing
サポート
可視化
* 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
その他
* 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
「大きな」行列 (4000x4000) でNAG ライブラリをうまく使用しました。
これはマネージ コードではありませんが、P/Invoke を使用しても問題はありませんでした。
32 ビットおよび 64 ビットの Windows 用のバージョンがあります (UNIX のバリエーションもいくつかあります)。また、x64 システムで複数のプロセッサをより適切に使用するための特別な MKL (Intel Math Kernel Library) および AMCL (AMD Math Core Library) バージョンもあります。
それが問題である場合、それも無料ではありません。