1

ブースト ublas コードを調べたところ、メモリ割り当ての ublas 実装compressed_matrixが CSC や CSR ほど標準的ではないことがわかりました。

問題の原因となる行が 1 つあります。つまり、 non_zeros = (std::max) (non_zeros, (std::min) (size1_,size2_));privaterestrict_capactiyメソッドにあります。

スパース行列を作成すると、ブースト ublas に割り当てられる非ゼロの数が常に より大きいということmin(nrow, ncol)ですか?

この問題を示すために使用した次のコード。出力では、compressed_matrix に割り当てられたベクトルの未使用部分にゼロが含まれます。

typedef boost::numeric::ublas::compressed_matrix<double, boost::numeric::ublas::column_major,0,std::vector<std::size_t>, std::vector<double> > Matrix;
long nrow = 5;
long ncol = 4;
long nnz = 2;

Matrix m(nrow, ncol, nnz);
cout<<"setting"<<endl;
m(1,2) = 1.1;
m(2,2) = 2.1;
    for(int i=0;i<m.index1_data().size();i++)
{
    cout<<"ind1 -"<<i<<" "<<m.index1_data()[i]<<endl;
}

for(int i=0;i<m.index2_data().size();i++)
{
    cout<<"ind2 -"<<i<<" "<<m.index2_data()[i]<<endl;
}

for(int i=0;i<m.value_data().size();i++)
{
    cout<<"val  -"<<i<<" "<<m.value_data()[i]<<endl;
}
4

1 に答える 1