Я использую Eigen для большей части своего кода, но я бы хотел использовать интеграцию Miser или Vegas monte-carlo из GSL. Мне нужно преобразовать векторы Эйгена в массивы c double
s
что было бы лучшим способом сделать это?
Matrix<double,3,1> --> c_array []
Я работал с Эйгеном раньше …
Обычно для простого доступа к данным внутреннего массива, например упоминается пользователем 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);
Надеюсь, что это помогло.
Других решений пока нет …