問題タブ [eigen]
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++ - 固有値を使用するように iOS プロジェクトを設定する
線形代数数学用の Eigen という c++ ライブラリをコンパイルする iOS プロジェクトをセットアップしようとしています。
で言及されている質問の指示に従い始めます。
しかし、私が理解できなかったいくつかの種類がまだあります。
- ユーザー Stafan は、適切なコンパイラ フラグ (-mfpu=neon -mfloat-abi=softfp) を設定するように言いました。これらのフラグはどこに設定すればよいですか? http://meandmark.com/blog/2011/10/xcode-4-setting-compiler-flags-for-a-single-file/のように、単一のファイルにフラグを設定することはすでにわかっています。しかし、どのファイルに対してこのフラグを設定する必要がありますか? 特に、Eigen ライブラリの c++ ファイルはここには表示されません。
- ユーザーの Blukee さんは、ビルド設定で armv7 に最適化された arch を使用したと述べています。ビルド設定の [アーキテクチャ] カテゴリに、標準 (armv7) と書かれている緑色のフィールドが表示されます。
,,singleViewApplication を作成したばかりで、MathLibary という新しい Objective C クラスで c++ ファイルを使用したいと考えていました。クラスに MathLibary.hh と MathLibary.mm という名前を付けると、Objective C と C++ を混同する可能性があると言う人もいました。クラスは次のようになります
アプリを実行しようとすると、ビルドが失敗し、コンパイラーが次のようなエラーを出します: SVD.h ファイルの 47 行目:
エラーは「型名」の後に修飾名が必要です
私にとっては、コンパイラがSVD.hを目的のcファイルとしてコンパイルしようとしているように聞こえますが、c ++です。
- ユーザー インターフェイス用のオブジェクティブ C ファイルとライブラリの C++ ファイルの両方をコンパイルするようにコンパイラを変更するにはどうすればよいですか
誰かが私を助けてくれることを願っています、どうもありがとう。
eigen - Eigen3 での MPFR (mpreal) の使用
Eigen3 Web サイトで、MPFR 多精度データ型の「サポートされていない」モジュールがあることを見てきました。これがどれほど信頼できるか知っている人はいますか?
私の主な目標は、mpreal を使用するだけでなく、複雑な < mpreal > を使用することです。
background - EigenBackground の計算を高速化するには?
移動カメラ ビデオを使用した適応型背景検出のために、このアルゴリズムの最適化を試みています。
http://www.springerlink.com/content/4j2m3885r3133202/fulltext.pdf
このアルゴリズムは、バックグラウンド モデルのアップグレードを高速化します (SVD はリアルタイム アプリケーションには重すぎます)。アルゴリズムを高速化するために管理できる属性は 3 つあります。属性は次のとおりです。
- N最初の SVD 計算のフレーム数
- M背景モデルを記述するための固有ベクトルの数 (M<=N)
- Pバッチ更新を行うために待機するフレーム数
処理時間とこれら 3 つの属性との関係を調べる方法を知っていますか?
最適値を見つける方法を知っていますか?
このアルゴリズムの重要な部分は、バッチ更新中に着信フレームを直交正規化するための QR 分解です。この関数には多くの時間がかかります。
直交正規化を計算するためのより高速なアルゴリズムを知っていますか?
ここで、私が使用しているm_cT (論文の行列U'=[U|E] ) の関数 QR:
テスト中に、フレーム内の高周波数のディテールによって、カメラの動き中に多くの誤検知が発生することに気付きました。
SVD 計算の前にスムーズ フィルターを適用すると、より良い検出 BG/FG が得られると思いますか?
ご協力ありがとうございました。
c++ - 式テンプレートを使用するライブラリを統合するにはどうすればよいですか?
プログラムの線形代数エンジンとしてEigen行列ライブラリを使用したいと思います。Eigenは、式テンプレートを使用して遅延評価を実装し、ループと計算を簡素化します。
例えば:
Eigenは式テンプレートを使用するため、次のようなコードを使用します
上記のサンプルでは、一時的なものを作成せずに、長さ10の単一ループに縮小されます(40ではなく、フロートは4のチャンクによってレジストラに入れられます)。それはどれくらいクールですか?
しかし、このようにライブラリを統合すると、次のようになります。
次に、次のような式:
Eigenの実装方法を利用することはできません。そして、これが最後ではありません。Eigenで式テンプレートが使用されている例は他にもたくさんあります。
簡単な解決策は、演算子を自分で定義せずにdata_
公開し、次のような式を記述することです。
これはカプセル化を破りますが、Eigenの効率を維持します。
他の方法は、独自の演算子を作成することですが、式テンプレートを返すようにします。しかし、私はC ++の初心者なので、これが正しい方法かどうかはわかりません。
質問が一般的すぎる場合は申し訳ありません。私は初心者で、誰にも尋ねることはありません。今まではstd::vector<float>
どこでも使っていましたが、今は行列も使う必要があります。プロジェクト全体でEigenに切り替えることstd::vector<float>
は大きな一歩であり、最初から間違った電話をかけることを恐れています。どんなアドバイスも歓迎します!
random - 任意の分布に従って Eigen::Matrix の係数を設定します
Eigen::Matrix には、行列のすべての係数をランダムな値に設定する setRandom() メソッドがあります。ただし、使用する分布を指定しながら、すべての行列係数をランダムな値に設定する組み込みの方法はありますか。
次のようなものを達成する方法はありますか?
c++ - boost ++::weighted_medianおよびeigen::vectorXf --newbie
ソートされていない可変長の固有値c++vectorXfオブジェクトのweighted_medianを取得したいと思います。Boostの統計アキュムレータライブラリのBoostweighted_median関数を使用して、それを効率的に行うことができるようです[?]。
本質的に、私はここで行われていることと非常によく似た何かをしようとしてい ます。Boostのアキュムレータがこのタスクに適したフレームワークであるかどうかはわかりませんが(アドバイスがない場合は!)、O(n)加重中央値のシェルフ実装に別のものは見つかりませんでした。
この時点での私の質問は、以下の「for(int i = 0; i <100; i ++)」ループをよりエレガントな構造に置き換える方法があるかどうかです。
PS私はこのSOの質問を見ましたが、そこで答えを操作可能な解決策に変える方法は本当に明確ではありません。
c++ - kdevelop #include
Kdevelop wikiによると(ページの下部)
*ビルド ツールチェーンを構成した後でも KDevelop がインクルード パスを適切に判断できない場合は、ディレクトリごとにインクルード パスを .kdev_include_paths ファイルに手動で追加できます。これは、KDevelop 内から、「インクルード ファイルが見つかりませんでした」という問題に関連付けられた「問題を解決する」ウィザードを実行することで実行できます。
今、私はこれを行いました(そして、問題のある下線付きの #include 行はもうありません)。しかし、ビルドしようとすると、次のようになります。
ユーザー BЈовић が詳細を尋ねます。
最小限のコンパイルのために KDEvelop の指示に従いました。プロジェクト -> テンプレートから新規作成 -> 標準 (単純な C make ベースの c++ アプリケーション)。バージョン管理システムは「なし」で、cmake ディレクトリは /usr/bin/cmake です。次に、 KDEvelop に下線が引か#include <Eigen/Dense>
れ、画面の下端にある [カスタム インクルード パスの追加] ポップアップをクリックし、固有値のパスを入力しました。このコードは、Eclipse およびシェルから問題なくビルドされることを付け加えておきます。#include <Eigen/Dense>
/home/kaveh/projects/mqn_get/main.cpp:15:23: fatal error: Eigen/Dense: No such file or directory
動機: デバッガーを使用する必要があり (コードで意図した結果が得られない)、eclipse はIMO が重すぎるため、kdevelop でビルドしようとしています。
concurrency - 大行列反転
一般的なサイズは 1000 x 1000 ですが、100000 x 100000 を超えることもあります (現在、時間とメモリのために失敗しています)。通常の感情は「逆をとらないで、それを行う別の方法を見つけてください」であることは知っていますが、現時点ではそれは不可能です. この理由は、逆行列を取得することを期待する、既に作成されているソフトウェアの使用によるものです。(注:これを変更する方法を検討していますが、それには時間がかかります)
現在、数値複製からの LU 分解法を使用しており、固有ライブラリのテストを行っています。固有ライブラリはより安定しており、少し高速であるように見えますが、正確さについてはまだテスト段階です。ATLAS や LAPACK などの他のライブラリをざっと見てみましたが、これらについてはまだ実質的なテストを行っていません。
固有ライブラリは逆数を計算するために並行メソッドを使用していないように見えますが (逆数の LU 因数分解部分では使用します)、ATLAS と LAPACK はこの制限において類似していると言えます。(私は現在、openMP を使用する場合と使用しない場合の固有値の速度の違いをテストしています。)
最初の質問は、並列化によって逆行列を最適化する方法を誰でも説明できるかということです。ここで、行列反転並列アルゴリズムについて説明している記事を見つけましたが、理解できませんでした。この記事は別の方法について話しているようですか?また、scaLAPACK または PETSc が役立つかどうかもわかりません。
2 番目の質問です。GPU を使用してパフォーマンスを向上させるというこの記事を読みましたが、GPU 用にコーディングしたことがないので、何が伝えようとしているのかわかりませんが、一番下のグラフはかなり警戒しているように見えました。これはどのように可能であり、それが真実である場合、このようなものを実装するためにどこから始めればよいでしょうか。
この記事も見つけましたが、理解するためにそれを読む時間がありましたが、メモリは私たちのソフトウェアの現在の問題であるため、有望なようです.
これらの記事または一般的な問題に関する情報は、非常に役立ちます。この質問が漠然としているように思われる場合は、もう一度お詫び申し上げます。必要に応じて、さらに拡大しようとします。
c++ - EigenのMatrixXd::resize()関数によってスローされた例外をキャッチするにはどうすればよいですか?
なぜこの例外をキャッチできないのですか?
私の(クライアント)コード:
例外をスローするEigenコードは、数レベル下にあります。
どの呼び出し
太字の線は、線の前にヒットする線です。
internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols);
ヒットします。これは、関数呼び出し内のどこかで発生します。
クライアントコードからこの例外をキャッチできないのはなぜですか?resize
Eigenライブラリが関数をマークしなかったためthrows
ですか?Eigenライブラリを使用してこのコードをこのmalloc
タイプエラーからスムーズに回復させるにはどうすればよいですか?
c++ - テンプレートライブラリを使用したコンパイラのメモリ消費(ブースト+ Eigen)
私はboost::accumulatorsとEigen線形代数ライブラリを利用するテンプレートアルゴリズムを書いています。コンパイル中、ビジュアルスタジオコンパイラ(cl.exe)、メモリ消費量は2.5GBを超えるRAMでピークに達し、私のPC(Windows 732ビットと3GBの仮想アドレス空間)が応答しなくなります(非常に長い時間:約1分) 。これらのコンパイルユニットのバイナリファイル(.obj)は10〜20MBです。
私の質問(これらの特定のライブラリには向けられていません)
- テンプレートを多用するコードのこれは正常な動作ですか?
- メモリ需要とコンパイル時間を削減するためにできることはありますか?
- 問題に対する適切な解決策がない場合、プログラミング言語を設計する人々がこれに対処しないのはなぜですか?C ++を理解する人が増えるほど、テンプレートを使用し、コンパイルが難しいコードや肥大化したバイナリを生成する可能性が高くなります。