問題タブ [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.
c++ - スカラーをテンプレートに置き換えると失敗する
double 型または float 型の Eigen::Matrix を取得する関数を作成しようとしています。この関数は、フロートに対して正常に機能します。
ただし、「フロート」をテンプレートにするとすぐに:
Linux で gcc 4.9.1 を使用すると、次のエラーが発生します。
.../utils.hpp: 関数 'Eigen::Matrix core::math::foo(const Eigen::Matrix&)': .../utils.hpp:77:47: エラー: メンバー 'transpose の要求' in '(0, 0)', これは非クラス型 'int' です。 result.block<3,3>(0,0) = T.block<3,3>(0,0).transpose( );
ここで何が問題になる可能性がありますか?
c++ - VectorXd の反復が連結された斜めの MatrixXd
対角線上の要素が短い VectorXd の N 複製である Eigen ライブラリを使用して、C++ で対角線 MatrixXd を作成する必要があります。
VectorXd R; // サイズ n のベクトル
VectorXd V; // R の N 個の連結複製に対応するサイズ n*N のベクトル、作成方法がわかりません
MatrixXd D=MatrixXd(V.asDiagonal()); //サイズ n N xn Nの私の対角行列
ありがとう。
c++ - Eigenのインデックスのベクトルから(Eigen::Vectorの)サブベクトルを抽出する方法は?
私が持っているとしましょう
と
ind_vec
xの要素を抽出する簡単な方法はありますか?
何かのようなもの:
c++ - C++ Eigen: 通常の (密な) 行列と DiagonalMatrix の両方を取ることができる関数を作成する方法は?
内部で線形代数を実行する関数がありますが、通常の密な行列と対角行列の両方を渡すことができるようにしたいと考えています (後者は効率のためです)。次の構文を試しました。
ただし、MatrixBase には cols() 関数がないため、コンパイルできません。
DiagonalMatrix クラスに toDenseMatrix() 関数があることは知っていますが、値の内部コピーが含まれているため、DiagonalMatrix から取得したいすべての最適化が無効になることが懸念されます。
これについてどうすればいいですか?
cmake - CMake がソース ディレクトリを見つけられない (Eigen のインストール)
ライブラリEigenを Ubuntu にインストールしていました。ダウンロードしたソースディレクトリと一緒に「ビルドディレクトリ」を作成することで、指示に従いました。つまり、ソース用とビルド用eigen-eigen-1306d75b4a21
の空の2 つのディレクトリがあります。eigen-build
それから私はしました:
直後にエラーが発生しmake install
、インストールが停止します。
明らかに、ディレクトリは存在します。私のCMakeの何が問題になっていますか? (私は CMake についてあまり知りません。2 番目のステップで、Qt4 などの多くのものが欠落しているといういくつかの警告を観察しましたが、エラー メッセージが示唆していることから、これが原因ではないと思います。)
c++ - Eigen::SparseMatrix を既存の 3 標準圧縮行/列配列にラップする方法
注:私はすでにこの質問をしましたが、「広すぎる」ため、あまり説明がありませんでした。この質問がどのように具体的になるかわかりません (特定の使用法のために特定のライブラリの特定のクラスを扱っています...)。 ..
疎行列で固有値を使用して、疎行列/行列乗算を実行したいと思います。これらの行列は、標準の 3 配列圧縮行/列ストレージで作業しているコードで既に定義されています。
次に、メモリ内で行列が重複しないようにするために、これらの配列のラッパーとして Eigen::SparseMatrix クラスを使用したいと思います (内部的に Eigen がそのような 3 配列ストレージを使用すると仮定します)。次のようなことをしたいと思います。
それは可能ですか?
どうもありがとう
c++ - Eigen segfault 最適化なし Solaris
次のコードがあります。
Solaris 11 (g++4.9 を使用) でプロジェクトを最適化せずにビルドすると、実行時に segfault (コア ダンプ) が発生します。掘り下げて段階的なデバッグを行った後、問題のある行は
DenseCoeffBase.h
function 内copyPacket
の 、つまり行 537にあると思います
コンパイル/実行に使用したコマンドライン:g++ -std=c++11 -I ./eigen_3.2.2 example.cpp; ./a.out
いくつかのコメント:
- 宣言
States st;
を 内に移動するmain()
と、機能し、segfault は発生しません。 v
inの宣言をコメント解除しStates
、C++ 11 スタイルの初期化をコメント化してからv.resize(2); v << 1, 1;
、コンストラクター内で使用すると、機能します-O2
または-O3
最適化を使用すると、機能します。- 私がテストした他のすべてのプラットフォーム (Ubuntu 14.04、Debian7、OS X 10.10) では、最適化レベルに関係なく動作します
- この問題は、g++4.9 の下で、最適化されていない Solaris でのみ発生するようです。
私が持っている質問は次のとおりです。
私が書いたコードは正しいですか?つまり、クラス内の初期化スタイルを安全に使用でき
C++11
ますか、それともベクトルを宣言してからコンストラクターでサイズを変更する必要がありますか?私のコードが正しい場合、誰かがこの問題に遭遇しましたか? (私はそれが非常にありそうもないことを知っていますが、それでも私は尋ねます:))
PS: 私は Eigen 3.2.2 を使用しています (ただし、この問題は 3.2.1 でも発生します)
Solaris11でプログラムをビルド/実行できるかどうか教えていただければ幸いです(コンパイラに関係なく)