問題タブ [svd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
exception - numpy の svd メソッドで代替 LAPACK ドライバーを使用していますか?
numpy.svd を使用して、条件の悪い行列の特異値分解を計算しています。一部の特殊なケースでは、svd が収束せず、Linalg.Error が発生します。いくつかの調査を行ったところ、numpy が LAPACK の DGESDD ルーチンを使用していることがわかりました。標準の実装では、ハードコードされた反復制限が 35 か何かの反復に設定されています。Matlab で同じ行列を分解しようとすると、すべてうまくいきます。これには 2 つの理由があると思います。2. Matlab は、ルーチンで 75 の反復制限を使用します。(彼らはソースでそれを変更し、再コンパイルしました。)
ここでの質問は、numpy ソースを変更せずに、numpy で使用されているバックエンドを DGESDD から DGESVD に変更する簡単な方法はありますか?
よろしくお願いします
java - Java行列ライブラリの問題
私は、74000 X 640次元の行列のSVD(単一値分解)を取得する必要があるプロジェクトで作業しています。Jama、効率的なJava Matrixライブラリ(EJML)、およびOjAlgoの3つのライブラリを試しました。SVDでのJava Matrixベンチマークメモリの結果に基づいて、これら3つを選択します。最初はJamaを使用しましたが、行数は列数以上でなければならず、別のステップで任意の行列次元のSVDを取得する必要があることを発見しました。そこで、EJMLとOjAlgoに移動しましたが、EJMLにいくつか質問/問題があります。
EJML-> SVDに対して正しい結果が得られますが、マトリックスサイズを74000 X 640次元に拡大すると、ヒープメモリの例外が発生するため、ライブラリのマトリックスサイズに制限がありますか?
マトリックスの作成に使用したコードは次のとおりです。
私の問題を理解して修正するのを手伝ってください。
ありがとうございました
c - Xcode 用の SVD ライブラリ
XcodeのCコードで使用されるSVDライブラリを探しました。svdcmp.c (コンピューティングの数値レシピから)を見つけましたが、非常に遅いです。SVDLIBCやCLAPACKなどの他の SVD ライブラリを見つけました。ただし、ターミナルでコンパイルする必要があります。それらをXcodeでコンパイルする方法はありますか? または、別のライブラリが存在する可能性がありますか?
java - JAVA での大規模な疎行列固有分解
サイズの大きな「スパース」行列 (たとえば、100 万 x 100 万) を処理し、行列に対して SVD、LU などの分解を実行できる Java の線形代数ライブラリを探しています。
いろいろ調べてCOLTを試してみたのですが、一定数までの行列しか扱えません。
EJML サイトは、これを処理できないとも述べています。(http://code.google.com/p/effective-java-matrix-library/wiki/FAQ)
このサイズのデータを処理できる C++ のパッケージがあることは知っていますが、Java を中心に他のすべてのコードを構築しているため、Java から移行することはできません。
何かご意見は?どんな助けでも大歓迎です!
objective-c - xcode の LAPACK からの SVD を使用して、Objective-C の A = USVt から V を計算します。
私の目標は、既知の四角形 (たとえば、800 x 600 の画面) から斜め/回転した四角形に遠近座標を転送することです。そうするために、私はこれを見つけました。これは非常に役に立ちました:キャプチャされた座標を画面座標に変換する
問題の解決策は他にもあると思います。1四角形から三角形を作成し、まだ解決できなかった数学関数を適用します。OR 式 A=USVt から得られる H マトリックスを使用します。上記のリンクで説明されているように、正しい H マトリックスを取得すると、任意の座標を非常に簡単に転送できるため、これは良さそうです。だから私はそれのために行くと思った!
苦労した後、私はmatlabでそれを行うことができました(上記のリンクをテストしました)、それはうまくいきました:)しかし、今はobjective-Cで?!
(A=USVt) の A で始まる以下のコードを書きました。H マトリックスに到達するための次の最初のステップである Vt を計算するには、matlab [USV]=SVD(A); と同様の関数を使用する必要があります。関数。だから私はここで見つけました:これを行うためにMATLABの組み込みLAPACK / BLASルーチンを呼び出すと、accelerator.hフレームワークを含めることができ、C-LAPACKの同等のdgesvd_(...)を使用できます。
ところで、キャプチャされた座標を画面座標に変換するのと同じ座標を使用して、テストをより簡単にします。
解決済み 私が抱えていた問題は、多次元配列 A が計算され、1 次元配列に変換される方法でした。Lapacks の入力は常に 1 次元であるためです:)
配列 A の計算方法も含めました。WP = Webcam および SC = 800*600 画面。
次に、matlab で Vt の最後の列を取得し、それを 3x3 行列に再形成します。これをHになるように転置します。
解決しました!!
matlab - MATLABSVDの特異値の順序付け
SVDのMATLABドキュメントには、返される対角行列の値が降順で特異値であると記載されています。特異値の自然な順序がどうなるかを知る方法はありますか?私が尋ねる理由は、特異値が入力行列の行に関連付けられた次元に対応しているためです。
matlab - opencvでのMatlabSVD出力
MatlabのSVD関数は、次の3つの行列を出力します。
また、S行列を使用して、可能な限り最小のコンポーネント数を見つけ、Xの次元を減らして、十分な分散を保持することができます。私の質問は、 Opencvを使用しS
て(マトリックスではなくU
)マトリックスを見つける方法です。OpenCVSVDのビルドを使用してSマトリックスを見つけることは可能ですか?つまり、OpenCV SVD関数はMatlabのように3つの行列を出力しますが、それらが同じかどうかはわかりません。これはOpenCVのSVDです:
これはMatlabSVDです。
ありがとうございました。
machine-learning - いくつの主成分を取る必要がありますか?
主成分分析が行列に対してSVDを実行してから、固有値行列を生成することを知っています。主成分を選択するには、最初のいくつかの固有値のみを取得する必要があります。では、固有値行列から取得する必要のある固有値の数をどのように決定するのでしょうか。
python - numpy.linalg.svd がシグマを降順で返さない
現在、numpy.linalg の svd 関数を使用して、大きな行列 (正確には画像) で SVD を計算しています。私が見つけたドキュメントと例はすべて、返されるシグマ値が降順で並べられていることを示しているようです (U と V^T の正しい順序を暗示しています)。
ただし、私のテストでは、シグマ値は順不同に見えます。だから私の質問は、何らかの理由で私のlinalgで何かがうまくいかないのか(私が知っている可能性は非常に低い)、それとも単にシグマを順序付けられていないものとして返すのかということです.
フォローアップの質問は、シグマを並べ替えて、U と V^T の順序にも変更が反映されるようにするための最良の方法です。
matlab - MATLAB: svds() が収束していません
そのため、一部の入力データに対してMATLAB のsvds()関数を使用すると、次のようになります。
同じデータを使用して実行するたびに、実行ごとに大幅に異なる出力 SVD サイズが得られることに気付きました。「フラグ」が設定されているかどうかを確認したところ、SVD が収束していないことがわかりました。ここでの私の通常のシステムでは、本当に収束する必要がある場合は、次のようにします。
しかし、私が知る限り、「L」を 3 番目の引数として使用すると、4 番目の引数は無視されます。つまり、収束していないという事実に対処する必要があるということですか? 「L」引数の代わりに「シグマ」引数を使用する方法もよくわかりません。また、計算されたSVDの数を無駄に減らしてみました。この問題について何か助けていただければ幸いです。
編集 以下のコメントをフォローアップしているときに、問題がデータマトリックスの構築方法に関係していることがわかりました。誤って行列を逆にして、(20x200) ではなく (4000x1) のサイズの入力があったことが判明しました。これが収束を拒否していた原因でした。 これは問題ではありませんでした
2番目の編集 誰かがまだこれに従っている場合、私は実際には間違っていました.入力を間違ってスケーリングしたため、データは収束しただけです. これは、私がデータを生成しているときにデータを生成するプログラムです。
また、svdOpts2.maxit > 1e9 まで実行してみましたが、週末中ずっと実行され、4.096e8 を超えることはありませんでした。アドバイスをいただければ幸いです。