- 25 名前:デフォルトの名無しさん [2009/05/05(火) 01:07:29 ]
- 質問です。
割と大きめの行列にSVD(特異値分解)したいので そういうライブラリを探しています。 それで、liboctave C++を使おうと思い以下のコードを試しに実行してみたのですが、 2x2程度の行列なら、1秒以内に完了するのですが、このコードだと15分たった現在も結果が返りません。 実際に演算にかけたい対象は、更に大きいものなので、これでは使い物にならないのですが・・・ こんなものなのでしょうか?また他に良いライブラリはないのでしょうか?確かSVDに関しては高速化の手法がいくつか考えられてたとおもうのですが・・・ Matrix m(5, 6); m(0,0) = 1; m(0,1) = 0; m(0,2) = 1; m(0,3) = 0; m(0,4) = 0; m(0,5) = 0; m(1,0) = 0; m(1,1) = 1; m(1,2) = 0; m(1,3) = 0; m(1,4) = 0; m(1,5) = 0; m(2,0) = 1; m(2,1) = 1; m(2,2) = 0; m(2,3) = 0; m(2,4) = 0; m(2,5) = 0; m(3,0) = 0; m(3,1) = 0; m(3,2) = 0; m(3,3) = 1; m(3,4) = 1; m(3,5) = 0; m(4,0) = 0; m(4,1) = 0; m(4,2) = 0; m(4,3) = 1; m(4,4) = 0; m(4,5) = 1; cout << "Original Matrix" << endl << m << endl; SVD svd(m); cout << "Left Singular Matrix" << endl << svd.left_singular_matrix() << endl; cout << "Singular Values" << endl << svd.singular_values() << endl; cout << "Right Singular Matrix" << endl << svd.right_singular_matrix() << endl; cout << "Recomposed Matrix" << endl << svd.left_singular_matrix()*Matrix(DiagMatrix(svd.singular_values()))*svd.right_singular_matrix() << endl;
|

|