0
私はSparse RowMajor行列を埋めることを試みています。ガイドに従って、私はトリプレット法を使用していました:しかし、この方法では空の行列が生成されます。私は、トリプレットリストメソッドでRowMajor行列を満たす例を見つけることができませんでしたが、それは可能ですか?Eigen fill up Sparse Rowトリプレット付きの主要行列
#include <iostream>
#include <Eigen/SparseCore>
#include <vector>
using namespace Eigen;
using namespace std;
int main()
{
int m = 3, n = 7;
SparseMatrix<double, RowMajor> M(m,n);
typedef Triplet<double,int> T;
vector<T> entries;
for(int k=1; k<=9;++k)
entries.push_back(T(internal::random<int>(0,m-1), internal::random<int>(0,n-1), k));
M.setFromTriplets(entries.begin(), entries.end());
cout << MatrixXd(M) << "\n";
}
生成します:
残念ながら、別の機能になっていたので、表示されているコードに行列の初期化を追加するのを忘れてしまいました。私は 'Eigen :: SparseMatrix data_matrix(rows、cols);で初期化すると信じています; –
ClonedOne
実際、 'ColMajor'マトリックスを使用すると、あなたのために動作することを確認できますか? – ggael
その間、別のフォーラム(面白い:)であなたの答えの1つの代替ソリューションを見つけました。現時点では、 'Eigen :: SparseMatrix data_matrix(cur_rows、cols);を実行しています。 data_matrix.reserve(cur_rows * 100000); 'data_matrix.insert(row_iter、words [word_freq [0]])= std :: stoi(word_freq [1]); 'で埋めて、うまくいくようです。 2つの選択肢の間に顕著なパフォーマンスの違いがあるかどうか知っていますか? –
ClonedOne