Я недавно начал использовать собственный библиотека. У меня возник вопрос о сопоставлении собственной матрицы с массивом C / C ++. Собственная матрица является столбцом по умолчанию. Поэтому, если я использую следующий код для сопоставления матрицы с массивом C / C ++,
double a[10];
double *p = &a[0];
MatrixXd(2,5) m;
for (int i=0; i<2;i++)
for (int j=0; j<5;j++)
m(i,j) = i+j;
cout<<m<<endl;
Eigen::Map<MatrixXd>(p,2,5) = m;
for (int i=0; i<10; i++)
cout<<a[i]<<" ";
cout<<endl;
Выход:
0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5
Если я изменю определение m как строки:
Matrix <double,2,5,RowMajor> m;
я ожидал, что результат выглядит так:
0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5
Но на самом деле результат был таким же, как и первый. Мой вопрос заключается в том, есть ли способ сопоставить собственную матрицу с массивом C / C ++, чтобы данные массива основывались на строках?
Я обнаружил, что могу использовать функцию memember matrix.data () для получения желаемого результата, но мне интересно, могу ли я сделать это с помощью map:
Используйте matrix.data () работает:
double a[10];
double *p = &a[0];
Matrix <double,2,5,RowMajor> m;
for (int i=0; i<2;i++)
for (int j=0; j<5;j++)
m(i,j) = i+j;
double *p1 = m.data();
for (int i=0; i<10; i++)
cout<<p1[i]<<" ";
cout<<endl;
Это не тип матрицы m
это имеет значение, но тип, используемый в Map
шаблон. Вы должны изменить тип, используемый в Map
шаблон должен быть основным.
Eigen::Map<Matrix<double,2,5,RowMajor> >(p,2,5) = m;
Других решений пока нет …