Как преобразовать статический 2d массив в Eigen - PullRequest
0 голосов
/ 04 мая 2019

Извините, я новичок в C ++.Поэтому я не использую указатели.Мне нужно преобразовать статический 2d массив C ++ в формат библиотеки Eigen.Мне нужно вычислить собственные значения и собственные векторы большой матрицы, поскольку это моя прикладная задача.

Мой код похож на

double matr1[100][100];

MatrixXd copy_matr1;

for (int i = 0; i < 100; i++)
   for (int j = 0; j < 100; j++)
      matr1[i][j] = i + j;

copy_matr1 = Map<MatrixXd>(matr1);

или (с заменой последней строки на следующую)

copy_matr1 = Map<MatrixXd>(matr1, 100, 100);

Но последняя строка неверна.Что такое правильная запись?

Но приведенный ниже код (который преобразует статический 1d массив C ++ в формат Eigen библиотеки) является правильным.Я не могу понять, где ошибка в предыдущем фрагменте.

double arr1[100];

MatrixXd copy_arr1;

for (int i = 0; i < 100; i++)
   arr1[i] = i + 10;

copy_arr1 = Map<MatrixXd>(arr1);

или (с заменой последней строки на следующую)

copy_arr1 = Map<MatrixXd>(arr1, 100);

Большое спасибо заранее!

1 Ответ

0 голосов
/ 04 мая 2019

Семантика перегрузок конструктора Eigen::Map<> позволяет отображать только «необработанный» массив в его собственный эквивалент, но не позволяет отображать необработанный массив необработанных массивов (т. Е. 2D необработанный массив).

Чтобы преобразовать 2D-массив в собственный эквивалент Eigen, вам необходимо представить первый в виде 1D-необработанного массива,

double matr1[100 * 100];

См. Например следующие вопросы и ответы о том, как легко отобразить логику вашего двумерного массива в одномерный массив:

...