Массив определяемой пользователем структуры в Eigen

Интересно, можно ли адаптировать массив с более сложными данными для использования в качестве вектора или матрицы в Eigen.

пример:

struct data
{
    /* some members...*/
    double numericValue;
    /* more members...*/
};
std::vector<data*> dataset;

можно ли сообщить eigen, как получить доступ к элементу numericValue и использовать набор данных для вычислений? В документации я нашел класс map, но не требуемые функции. Любые идеи?


person Smittii    schedule 01.03.2012    source источник
comment
Я надеюсь, что вы не пропускаете data экземпляров в свой код, вектор с членами-указателями часто является плохой идеей. Лучше используйте valgrind --leak-check=full в вашем исполняемом файле для целей отладки.   -  person hochl    schedule 21.03.2012
comment
Члены-указатели на самом деле не проблема, и в моем случае я думаю, что это лучший способ. Что я делаю, так это строю дерево квадрантов, выполняю некоторые операции, специфичные для дерева квадрантов, и операции, основанные на векторной алгебре.   -  person Smittii    schedule 21.03.2012


Ответы (1)


Я не уверен, правильно ли я понимаю ваш вопрос, но у вас есть структурированные данные, в которых у вас есть чередующиеся элементы, которые вы хотели бы объединить в вектор или матрицу, чтобы выполнить над ним собственные операции.

Если это то, что вас интересует, действительно тип карты — ваш друг. Следующее выражение должно дать вам то, что вы хотите (непроверено):

typedef Map<VectorXd, 0, InnerStride<sizeof(data)/sizeof(double)> > MyMap;
MyMap map( &dataset[0].numericValue, dataset.size() );

теперь вы можете, например. сделать что-то вроде

map *= 2.0;

чтобы умножить все ваши члены numericValue на 2,0.

person Jakob    schedule 21.03.2012
comment
Хорошее решение, но работает ли оно и с массивом указателей? - person Smittii; 21.03.2012
comment
Ах ... пропустил это в исходном вопросе. В этом случае вы не можете делать никаких предположений о расположении ваших данных в памяти. Единственное, что я мог придумать, это использовать настраиваемые типы для покрытия для косвенного обращения с указателем. Однако вы можете подумать, стоит ли этот вариант затраченных усилий. - person Jakob; 27.03.2012