Сохранить / преобразовать Eigen :: Matrix в / в список

У меня есть Eigen::MatrixXi, который обновляется в простом цикле, и в соответствии с некоторой переменной diff_neighbors_total содержимое матрицы может меняться, и я хочу преобразовать / сохранить мои собственные матрицы следующим образом: Когда diff_neighbors_total = 3 это должен хранить всю матрицу в третьем элементе списка и т. д. Я пытаюсь использовать std::list, но поскольку он находится в цикле, список элементов списка изменяется, и я получаю список больше обычного. Вот соответствующий код в R-языке (который я пытаюсь преобразовать в C ++):

list.matrix.constraint[[(diffNeighbors.total+1)]] <-  
list.matrix.constraint[[(diffNeighbors.total+1)]] +  
matrix.correspondance.intermediate 

Желаемый вывод для этого конкретного случая:

0
0
0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 1 0 0
1 0 0 0 0 0
0 0 0 0 0 0

Вот код и выход:

 std::list<Eigen::MatrixXi> list_matrix_constraint;

// for each row
for (int isomorp_row=0; isomorp_row<sub_count; isomorp_row++)
{
    // Some code here
    int diff_neighbors_total = 0; //for filter2
    // for each column in corresponding row
    for(int isomorp_col=0; isomorp_col < getsubG.row(0).size(); isomorp_col++)
    {
    // ...
    // Some code here    
    correspondance_matrix_intermediate.setZero();
    for(int j=0;j<subG.size();j++)
    {
        correspondance_matrix_intermediate(subG(j),j) = correspondance_matrix_intermediate(subG(j),j) + 1;
    }

    std::list<Eigen::MatrixXi>::iterator it = list_matrix_constraint.begin();
    // List i contains all subisomorphism with total edge difference of i
    for (int i=0;i<diff_neighbors_total;i++)
    {
        //std::cout << "it: " << *it << std::endl;
        list_matrix_constraint.insert(it,zero_matrix);
        it++;
    }
    list_matrix_constraint.insert(++it,correspondance_matrix_intermediate);
    //list_matrix_constraint.insert(it,*it);

} // end of row operations

std::cout << std::endl;
std::cout << std::endl;
std::cout << "List: " << std::endl;
for (std::list<Eigen::MatrixXi>::iterator it = list_matrix_constraint.begin(); it!= list_matrix_constraint.end(); it++)
{
    std::cout << *it << std::endl;
}

// rest of main

Выход:

List: 
0
0
0
0
0
0
0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 1 0 0 0
0 1 0 0 0 0
1 0 0 0 0 0
0 0 0 0 0 0
0
0
0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 1 0 0
1 0 0 0 0 0
0 0 0 0 0 0
0
0
0
...
0
задан 13 August 2018 в 15:57

0 ответов

Другие вопросы по тегам:

Похожие вопросы: