Скопируйте данные из std::vector в MatrixXd Eigen на C++

Eigen — это библиотека линейной алгебры на C++. У меня есть данные (тип double) в массиве типов std::vector (DataVector в приведенном ниже коде). Я пытаюсь скопировать его по строкам, используя следующий код, который по-прежнему дает результаты по столбцам.

Map<MatrixXd, RowMajor> MyMatrix(DataVector.data(), M, N);

Я делаю правильный синтаксис здесь?


person dineshdileep    schedule 12.05.2015    source источник


Ответы (1)


Нет. Объект MatrixXd должен быть определен как основная строка/столбец. См. пример ниже.

#include <Eigen/Core>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;

int main(int argc, char *argv[])
{
    std::vector<int> dat(4);
    int i = 0;
    dat[i] = i + 1; i++;
    dat[i] = i + 1; i++;
    dat[i] = i + 1; i++;
    dat[i] = i + 1;
    typedef Eigen::Matrix<int, -1, -1, Eigen::ColMajor> Cm;
    Eigen::Map<Cm> m1(dat.data(), 2, 2);
    cout << m1 << endl << endl;

    typedef Eigen::Matrix<int, -1, -1, Eigen::RowMajor> Rm;
    Eigen::Map<Rm> m2(dat.data(), 2, 2);
    cout << m2 << endl << endl;

    return 0;
}

Выходы:

1 3
2 4

1 2
3 4
person Avi Ginsburg    schedule 12.05.2015