Каков эффективный способ преобразования матрицы Eigen в массив c, чтобы я мог использовать gsl

Я использую Eigen для большей части своего кода, но я бы хотел использовать интеграцию Miser или Vegas monte-carlo из GSL. Мне нужно преобразовать векторы Эйгена в массивы c doubles
что было бы лучшим способом сделать это?

Matrix<double,3,1> --> c_array []

3

Решение

Я работал с Эйгеном раньше …

Обычно для простого доступа к данным внутреннего массива, например упоминается пользователем janneb в этой теме, ты просто хочешь взывать данные():

Vector3d v;
// Operations to add values to the vector.
double *c_ptr = v.data();

Если вы хотите перебрать отдельные значения для выполнения какой-либо операции, вы хотите перебирать каждый строка (.row (индекс)) а также столбец (.col (индекс)), в зависимости от порядка матрицы, который вы хотите положить в вектор назначения.

В вашем конкретном примере вам нужно только перебрать строки:

Matrix<double,3,1> --> c_array []

Вы хотели бы позвонить .Col (0). Если возникнут аналогичные потребности, конкретная документация всегда полезна!

Таким образом, вы получите что-то вроде (при условии, что вы хотите использовать трехстрочную матрицу из одного столбца):

Vector3d v;
// Operations to add values to the vector.
for (int i=0; i<v.rows(); ++i)
c_array[i] = v(i,0);

Надеюсь, что это помогло.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector