Eigen::Map
template<typename PlainObjectType, int MapOptions, typename StrideType>
class Eigen::Map< PlainObjectType, MapOptions, StrideType >
Матричное или векторное выражение, отображающее существующий массив данных.
- Параметры шаблона
-
PlainObjectType эквивалентный тип матрицы для отображаемых данных MapOptions указывают выравнивание указателя в байтах. Может принимать значения: Aligned128,Aligned64,Aligned32,Aligned16,Aligned8илиUnaligned. По умолчаниюUnaligned.StrideType необязательно указывает шаги. По умолчанию Map предполагает структуру памяти обычного, непрерывного массива. Это можно изменить, указав шаги. Передаваемый здесь тип должен быть специализацией шаблона Stride, см. примеры ниже.
Этот класс представляет матричное или векторное выражение, отображающее существующий массив данных. Он может использоваться для обеспечения интерфейса Eigen без каких-либо накладных расходов с не-Eigen структурами данных, такими как обычные массивы C или структуры из других библиотек. По умолчанию предполагается, что данные непрерывно расположены в памяти. Однако вы можете изменить это, явно указав внутренние и внешние шаги.
Вот пример простого отображения непрерывного массива как матрицы в порядке хранения по столбцам:
int array[9]; for(int i = 0; i < 9; ++i) array[i] = i; cout << Map<Matrix3i>(array) << endl;
Вывод:
0 3 6 1 4 7 2 5 8
Если вам нужно отобразить несмежные массивы, вы можете сделать это, указав шаги:
Вот пример отображения массива как вектора, указав внутренний шаг, то есть приращение указателя между двумя последовательными коэффициентами. Здесь мы указываем внутренний шаг как постоянное значение времени компиляции.
int array[12]; for(int i = 0; i < 12; ++i) array[i] = i; cout << Map<VectorXi, 0, InnerStride<2> > (array, 6) // the inner stride has already been passed as template parameter << endl;
Вывод:
0 2 4 6 8 10
Вот пример отображения массива с указанием внешнего шага. Здесь, поскольку мы отображаем матрицу в порядке хранения по столбцам, "внешний шаг" означает приращение указателя между двумя последовательными столбцами. Здесь мы указываем внешний шаг как параметр времени выполнения. Обратите внимание, что здесь OuterStride<> - это короткая версия OuterStride<Dynamic>, так как параметр шаблона по умолчанию OuterStride - Dynamic.
int array[12]; for(int i = 0; i < 12; ++i) array[i] = i; cout << Map<MatrixXi, 0, OuterStride<> >(array, 3, 3, OuterStride<>(4)) << endl;
Вывод:
0 4 8 1 5 9 2 6 10
Для получения более подробной информации и примера указания как внутреннего, так и внешнего шага, см. класс Stride.
Подсказка: чтобы изменить массив данных, отображаемый объектом Map, можно использовать синтаксис размещения new в C++:
Пример:
int data[] = {1,2,3,4,5,6,7,8,9}; Map<RowVectorXi> v(data,4); cout << "The mapped vector v is: " << v << "\n"; new (&v) Map<RowVectorXi>(data+4,5); cout << "Now v is: " << v << "\n";
Вывод:
The mapped vector v is: 1 2 3 4 Now v is: 5 6 7 8 9
Этот класс является типом возвращаемого значения PlainObjectBase::Map(), но также может использоваться непосредственно.
- См. также
- PlainObjectBase::Map(), Порядки хранения
| Map (PointerArgType dataPtr, const StrideType &stride=StrideType()) | |
| Map (PointerArgType dataPtr, Index rows, Index cols, const StrideType &stride=StrideType()) | |
| Map (PointerArgType dataPtr, Index size, const StrideType &stride=StrideType()) | |
Map() [1/3]
| inlineexplicit |
Конструктор в случае фиксированного размера.
- Параметры
-
dataPtr указатель на отображаемый массив stride необязательный объект Stride, передающий шаги.
Map() [2/3]
| inline |
Конструктор в случае динамического размера вектора.
- Параметры
-
dataPtr указатель на отображаемый массив size размер векторного выражения stride необязательный объект Stride, передающий шаги.
Map() [3/3]
| inline |
Конструктор в случае динамического размера матрицы.
- Параметры
-
dataPtr указатель на отображаемый массив rows количество строк матричного выражения cols количество столбцов матричного выражения stride необязательный объект Stride, передающий шаги.
The documentation for this class was generated from the following file:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1Map.html