来自索引向量(行,列)和值向量的特征矩阵?

时间:2021-06-29 21:51:25

标签: c++ matrix eigen eigen3

这里是 Eigen / C++ 新手。
我确实有大量(稀疏)矩阵来初始化和填充,并且我确实有索引向量(行,列)和与这些相对应的值向量。我如何快速(有效地)从两者中构建一个矩阵? 这个时候,我准备了 Triplets 的向量,然后我使用了 setFromTriplets,但是在循环中制作那个 Triplets 的向量效率太低了。

我觉得必须有比循环更好的方法。请帮忙。

void ImagingObjects::InitSparseSigmaPriorTriplets(Eigen::VectorXd& signals_vec)
{

Eigen::MatrixXd values = signals_vec.sum() * ( *this->GetSigmaPValues() );

for (size_t i=0; i < sparse_sigma_prior_triplets_vector.size(); ++i) 
{
    int index_row = (int) (*this->GetSigmaPIndices())(i, 0);
    int index_col = (int) (*this->GetSigmaPIndices())(i, 1);
    sparse_sigma_prior_triplets_vector[i] =  (Eigen::Triplet <double> ){ index_row, index_col, values(i) } ;
}
}

所以基本上我每次都通过启动嵌套循环为每个数据样本准备这些三元组。 然后,在算法求解器迭代循环中,我有以下代码:

size_t array_it = 0;
for (size_t i=0; i < sigma_prior_retain_bool_array.size(); ++i) 
{
    if( sigma_prior_retain_bool_array[i] )
    {
        triplets_sigma_prior[array_it] = *ImagingObjsPtr->GetSparseSigmaPriorTriplet(i);
        array_it++;             
    }       
}   
        
auto end_it = triplets_sigma_prior.begin() + array_it;
Sigma_prior_sparse.setFromTriplets(triplets_sigma_prior.begin(),end_it );

0 个答案:

没有答案