Boost ライブラリのバージョン 1.44.0 と c++ を gcc 4.0 で使用しています。
を作成ublas::compressed_matrix<double>
し、メソッドを使用して入力しましたinsert_element(index1, index2, value)
。その後、マトリックスの要素を繰り返し処理し、ゼロ以外の要素を出力しています。i1_t
反復には次のコードを使用します (とi2_t
はであることに注意してくださいtypedef boost::numeric::ublas::compressed_matrix<double>::iterator
)。
for (i1_t i1 = matrix->begin1(); i1 != matrix->end1(); i1++) {
for (i2_t i2 = matrix->begin2(); i2 != matrix->end2(); i2++) {
cout<<"("<<i2.index1()<<","<<i2.index2()<<")="<<*i2<<" ";
}
cout<<endl;
}
または、次のようにします。
for (i1_t i1 = matrix->begin1(); i1 != matrix->end1(); i1++) {
cout<<i1.index1()<<" -> ";
for (i2_t i2 = matrix->begin2(); i2 != matrix->end2(); i2++) {
cout<<i2.index2()<<" ("<<*i2<<") ";
}
cout<<endl;
}
もちろん、どちらもほとんど同じことをしています。コードは、stackoverflow の別の投稿で提供された提案に従います:ゼロ以外の要素の反復
ただし、コードを実行すると、次のエラーが発生するまで、最初のいくつかの要素のみが正しく出力されます (特に、これは最初の 6 つのエントリに適用されます)。
Check failed in file /opt/local/include/boost/numeric/ublas/matrix_sparse.hpp at line 3109:
p
terminate called after throwing an instance of 'boost::numeric::ublas::bad_index'
what(): bad index
ただし、すべての要素がマトリックスに正しく挿入されているようです。何が起こっているのか、なぜこのエラーが発生するのか、それはどういう意味ですか?
どうもありがとう。