問題タブ [matrix-inverse]
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.
c++ - 非常に大きな行列の逆数を計算する
C++ で非常に大きな行列 (11300x21500) の逆数を計算しようとしています。これまでに Eigen と Armadillo ライブラリを試しましたが、どちらも初期化段階で失敗し、十分なメモリがないと言って失敗しました。この状況を打破する方法はありますか?
前もって感謝します
PS
マトリックスのサイズを 21500x21500 に修正する必要があります。UmNyobe が示唆したように、これは正方行列ではありません。これは実際には観測行列Xであり、( X T X ) -1を計算しようとしています。
私は 8GB のメモリ (64 ビット システム) を持っていますが、このメモリ空間のすべてを利用しているとは思いません。タスクマネージャーを見ると、エラー時のメモリ使用量は1GBと表示されています。Windows7 には、メモリ使用量が 1GB を超えるとアプリケーションを終了する OS コマンドが存在する可能性があります。
ところで、私の本来の目的は、この観測行列に対して回帰を実行することです。
もう 1 つ: 観測行列 X の各行のほとんどの列はゼロです。これを利用して、反転操作でのメモリ使用量を制限する方法はありますか?
c++ - 実行時チェックの失敗 #2 - 変数 'B' の周りのスタックが壊れていた
このエラーは何度も発生しますが、コードに問題は見られません (C++ の場合) プログラムは 2x2 行列の逆行列を見つけることになっています
c - CBLAS/LAPACK を使用した C の対称行列反転
行列とベクトルの乗算を必要とするアルゴリズムを C で作成しています。ベクトルJ (1 x W)の転置をそれ自体で乗算し、スカラーaを使用してスケーリングされた単位行列Iを追加することによって作成される行列Q (W x W) があります。
Q = [(J^T) * J + aI]。
次に、 Q の逆数にベクトルGを掛けて、ベクトルMを取得する必要があります。
M = (Q^(-1)) * G.
私はcblasとclapackを使用してアルゴリズムを開発しています。行列Qが乱数 (タイプ float) を使用して設定され、ルーチンsgetrf_およびsgetri_を使用して反転される場合、計算された逆行列は正しいです。
しかし、行列 Q が対称の場合、つまり (J^T) x J を掛けた場合、計算された逆数は間違っています!! .
C からlapackルーチンを呼び出す際に、配列の行優先 (C の場合) および列優先 (FORTRAN の場合) の形式を認識していますが、対称行列の場合、これは A^T = A であるため問題になりません。
行列反転の C 関数コードを以下に添付しました。
これを解決するためのより良い方法があると確信しています。誰でもこれで私を助けることができますか?
cblas を使用したソリューションは素晴らしいでしょう...
ありがとう。
c++ - 逆行列 OpenCV。Matrix.inv() が正しく機能しない
解決策が見つからない問題が 1 つあります。
1 つの既知の行列の逆行列を使用して計算を行う必要があります。
その後:
マトリックスの内容は次のようになります。
もちろん、Matlabで結果を確認したので、それは間違っています。両方のマトリックスが表示され、float として読み取られ、その深さは64FC1
.
何ができるか考えている人はいますか?
皆さんありがとう
より多くのコード:
関数 printMatrix:
printMatrix
しかし、要素を個別に出力すると、逆数で同じ奇妙な結果が得られるため、エラーはありません。
performance - 逆行列の最速の方法
逆関数や関数の多い画像を処理したい。コードを高速に実行するには、3 つの反転方法の中で高速な方法を提案できますか?
- CV_LU 最適なピボット要素が選択されたガウス消去法
- CV_SVD 特異値分解 (SVD) メソッド
- CV_SVD_SYM 対称正定義行列の SVD メソッド。
c++ - スパース行列を逆にする
スパース行列を使用しているので、それを反転する必要があります。実際、私はスパース行列を格納および反転できるライブラリを探しています。誰か知っていますか?
c - C の優れた行列反転ルーチン
数値計算用の Python コードの一部として、幾分大きな (スパース) 行列 (~100x100) を何度も反転する必要があります。私は本当にプログラムをスピードアップしたいと思っています.私に提案された方法の1つは、行列反転ステップのためにCのサブルーチンを呼び出すことです.
このタスクに対して、効率的で十分にテストされた、推奨される C ルーチンはありますか?
ありがとうございました。
concurrency - 大行列反転
一般的なサイズは 1000 x 1000 ですが、100000 x 100000 を超えることもあります (現在、時間とメモリのために失敗しています)。通常の感情は「逆をとらないで、それを行う別の方法を見つけてください」であることは知っていますが、現時点ではそれは不可能です. この理由は、逆行列を取得することを期待する、既に作成されているソフトウェアの使用によるものです。(注:これを変更する方法を検討していますが、それには時間がかかります)
現在、数値複製からの LU 分解法を使用しており、固有ライブラリのテストを行っています。固有ライブラリはより安定しており、少し高速であるように見えますが、正確さについてはまだテスト段階です。ATLAS や LAPACK などの他のライブラリをざっと見てみましたが、これらについてはまだ実質的なテストを行っていません。
固有ライブラリは逆数を計算するために並行メソッドを使用していないように見えますが (逆数の LU 因数分解部分では使用します)、ATLAS と LAPACK はこの制限において類似していると言えます。(私は現在、openMP を使用する場合と使用しない場合の固有値の速度の違いをテストしています。)
最初の質問は、並列化によって逆行列を最適化する方法を誰でも説明できるかということです。ここで、行列反転並列アルゴリズムについて説明している記事を見つけましたが、理解できませんでした。この記事は別の方法について話しているようですか?また、scaLAPACK または PETSc が役立つかどうかもわかりません。
2 番目の質問です。GPU を使用してパフォーマンスを向上させるというこの記事を読みましたが、GPU 用にコーディングしたことがないので、何が伝えようとしているのかわかりませんが、一番下のグラフはかなり警戒しているように見えました。これはどのように可能であり、それが真実である場合、このようなものを実装するためにどこから始めればよいでしょうか。
この記事も見つけましたが、理解するためにそれを読む時間がありましたが、メモリは私たちのソフトウェアの現在の問題であるため、有望なようです.
これらの記事または一般的な問題に関する情報は、非常に役立ちます。この質問が漠然としているように思われる場合は、もう一度お詫び申し上げます。必要に応じて、さらに拡大しようとします。
osx-lion - 加速フレームワークを使用して行列逆演算を実行するにはどうすればよいですか?
逆行列を見つけたいのですが。
私はこれが最初のLU分解、次に反転ステップを含むことを知っていますが、10.7のアップルのドキュメントを検索しても必要な関数を見つけることができません!
これは、 CBLAS / LAPACKを使用したCでの対称行列反転後の有用なようであり、sgetrf_
およびsgetri_
関数を使用する必要があることを示しています。ただし、これらの用語を検索しても、Xcodeドキュメントには何も見つかりません。
この行列演算のボイラープレートコードを持っている人はいますか?