問題タブ [eigen3]

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.

0 投票する
2 に答える
5711 参照

c++ - Eigen3でベクターのサイズを変更する方法

LineSegment<T,dim>テンプレート化されたクラスで2つのEigen3ベクトルをラップしています。あなたはそれをこのように使うかもしれません:

これには、コンポーネントの寸法を変更するためのテンプレート化されたメソッドが含まれています。トリミングされた定義は次のとおりです。

だから私の質問は、上記のように、どのように戻り値を構成することができますか?これは、ディメンションの増加と減少の両方をサポートする必要があります。

Eigen3のresize(int)メソッドを使用しようとしましたが、行列サイズの混合に関する警告が表示されない限り、機能させることができませんでした。

最終的に、これは機能するはずです。

私はC++テンプレートに比較的慣れていないので、これが単なるAPIの質問ではなく、テンプレートに関連している場合は、少し説明していただければ幸いです。

0 投票する
1 に答える
3257 参照

c++ - Eigen Affine3d を Affine2d に変換

3D でアフィン変換があり、z 軸情報を破棄したいと考えています。Affine3dを とに変換する便利な方法はありAffine2dますか?

0 投票する
0 に答える
253 参照

numerical-methods - 固有値で ILUT パーコンディショナーを使用して BICGSTAB 線形ソルバーを実行すると、「推定誤差」-1.#IND が発生するのはなぜですか?

質問したいのですが、固有値 (C++ ライブラリ、数値線形計算を行う) を使用して線形方程式を解く場合、双共役勾配 BICGSTAB を不完全 LU 前提条件で使用しますが、結果 bg.error()("estimated error") は -1 になります。#IND、1 回の反復の後、線形方程式のサイズは 20000 です。この問題について誰か助けてくれませんか? 他の小さなサイズ、たとえば 200 も試してみましたが、それで問題ありません。

0 投票する
2 に答える
971 参照

c++ - GCC C++11 デバッグ ビルド、リリースが失敗する

私はしばらくの間取り組んできたプロジェクトを持っていますが、常にデバッグ中です。今日、リリースをビルドしようとしましたが、非常に奇妙なエラーをスローしてコンパイルに失敗しました。デバッグは警告なしでコンパイルされますが、リリースは次をスローします。

両方の CMake ビルドで c++11 が有効になっています。

Release でコンパイル エラーの原因を追跡するにはどうすればよいですか?

編集私はCmake 2.8を使用しており、gcc-4.6.3および4.7.2でコンパイルしようとしましたが、どちらも同じ問題を抱えています。

EDIT#2 c++11 の代わりに -std=c++0x を使用すると問題が解決しません。

EDIT#3 g ++ 4.6へのダウングレードはあまり役に立ちませんでした。エラーは単純に次のように変更されました。

EDIT#4<thread>最初に問題を引き起こしたものを削除しました。それからそれはでし<mutex><atomic>。これは、 を使用する任意のコードですstd::shared_ptr<Blah>。Release が C++11 でコンパイルすることをまったく望んでいないように思えます。これはわざとですか?

0 投票する
2 に答える
381 参照

debugging - clang 置換失敗エラーから詳細情報を取得するにはどうすればよいですか?

std::beginEigen3 行列の周りに次のラッパーがあります。

置換が失敗し、コンパイラ エラーが発生します ( error : no matching function for call to 'begin' )。このオーバーロードの場合、clang は次を出力します。

このオーバーロードを選択してほしい。私は型がdoubleandintであることを期待しています。関数を見ると、実際に失敗する可能性があるものは何もありません。

時々、同様のエラーが発生します。ここで、clang は次のように教えてくれますただし、これはデバッグにはまったく役立ちません。置換が失敗した理由は何ですか? どこで代用できなかったのですか?私にとって明らかな唯一のことは、コンパイラが知っているということですが、意図的に教えていません:(

  • ここで正確に何が失敗したかをclangに強制することは可能ですか?

  • この機能は簡単で、問題があります。より複雑な機能では、事態は悪化するだけだと思います。この種のエラーをどのようにデバッグしますか?

0 投票する
2 に答える
339 参照

c++ - 固有データの `std::list` へのポインタ

私はEigen3 2次元ベクトルをopengl描画の2Dポイントとして使用し、それらをリストに保存しています:

ここで、生の float 座標値のデータ構造全体をグラフィック カードに渡すために、GLfloat の配列が必要です。

グラフィックカードに渡す配列を作成するためのより効率的な方法はありますか? 通過points.begin()してオフセットが何であるかを調べ、すべてのポイントをループするのを避けるように?

つまり..メモリでは、のx座標とy座標をEigen::Vector2d連続したスペースに保存する必要があります..だから..グラフィックカードに直接渡すことができると思います..しかし、私はその方法を理解できません.

0 投票する
1 に答える
468 参照

c++ - 固有密行列データ構造を使用する場合、何を期待すればよいですか?

プログラムで行列データ構造を使用する必要があります.C++には2次元配列があり、非常に低レベルですが、Eigenなどの一部のライブラリは高レベルの行列データ構造を提供します. しかし、私の意見では、ライブラリが svd などの高度な操作でどれほど優れたパフォーマンスを発揮しても、読み取り (アクセス)、書き込み、合計、ドットなどの基本的な操作の高速化は、そのようなライブラリの前提条件であるべきです。 . 実際のアプリケーションでは、このような基本的な操作は高度な操作よりもはるかに頻繁に行われる可能性があるため、ライブラリでそのような操作が遅いと、システムの負担やボトルネックになる可能性があります。

そこで、2 次元配列と Eigen3 密行列 (MatrixXd) の両方を使用していくつかの非常に単純なプログラムを作成し、4 つの基本演算でのパフォーマンスを比較すると、ほとんどの場合、2 次元配列が Eigen3 に勝つことがわかりました。これは非常に残念です。テスト結果の一部を以下にリストします (コードは最後の付録にあります)。

10000X10000 行列、コンパイル コマンド: g++ -o test.o test.cpp -O0 -msse2

固有値:

[!COST] 初期化: 6.8 秒。

[!COST] 読み取り: 14.85 秒。

[!COST] 書き込み: 23.02 秒。

[!COST] 合計: 3.28 秒。

[!COST] ドット: 3.12 秒。

CPP:

[!COST] 初期化: 1.81 秒。

[!COST] 読み取り: 2.4 秒。

[!COST] 書き込み: 3.4 秒。

[!COST] 合計: 0.63 秒。

[!COST] ドット: 0.52 秒。

10000X10000 行列、コンパイル コマンド: g++ -o test.o test.cpp -O3 -msse2

固有値:

[!COST] 初期化: 2.44 秒。

[!COST] 読み取り: 2.16 秒。

[!COST] 書き込み: 2.18 秒。

[!COST] 合計: 0.26 秒。

[!COST] ドット: 0.26 秒。

CPP:

[!COST] 初期化: 1.71 秒。

[!COST] 読み取り: 2.06 秒。

[!COST] 書き込み: 2.24 秒。

[!COST] 合計: 0.15 秒。

[!COST] ドット: 0.06 秒。

ただし、これについてはまだ疑問があります。マトリックス構造のより高いレベルの抽象化が生のバージョンと同じくらい高速に機能することを期待しないでください。そうであれば、Eigen などのライブラリを使用して何を期待する必要がありますか? 私のプログラムでは、行列へのアクセスや行列の書き込みなどのより基本的な操作がある一方で、SVD などの高度な操作がいくつかあることに注意してください。

付録、test.cpp: