Карта Eigen дубликат Матрица

Я пытаюсь перенести код из Matlab в C ++. Есть некоторая информация, связанная с моим делом в форумах KDE Eigen.

То, чего я пытаюсь достичь, связано с ячеистой сеткой Matlab, для которой данное решение

X = RowVectorXd::LinSpaced(1,3,3).replicate(5,1);
Y = VectorXd::LinSpaced(10,14,5).replicate(1,3);

т.е. .replicate векторы количество другого измерения. В моем случае у меня есть два существующих (n x 1) вектора и я хочу создать (n ^ 2, 2) матрицу, которая содержит все комбинации векторных элементов, то есть:

[1 3 6]^T and [7 8]^T ==> [1 7, 3 7, 6 7, 1 8, 3 8, 6 8]^T

где ^T просто означает транспонирование, строки разделены запятыми. (В моем случае векторы используют поплавки, но это не должно иметь значения).

Первый столбец матрицы [1 3 6 1 3 6]^T легко создается Эйгеном .replicate функция. Тем не менее, я изо всех сил, чтобы создать второй столбец [7 7 7 8 8 8]^T,

Моя идея заключалась в использовании .replicate в другом измерении (получение матрицы), а затем использовать rowWise Eigen::Map привести его к линейному (векторному) виду (как предложено) в документах), но я понимаю возникающую ошибку компилятора такую, что Eigen::Map не работает с Eigen::Replicate тип.

#include <Eigen/Core>
using namespace Eigen;
int main()
{
MatrixXd reptest1(1, 5);
reptest1 << 1, 2, 3, 4, 5;
auto result2 = reptest1.replicate(2, 1); // cols, rows: 5, 2
auto result3 = Map<Matrix<double, 1, Dynamic, Eigen::RowMajor> >(result2);  // this doesn't work
return 0;
}

VS2017 жалуется: error C2440: '<function-style-cast>': cannot convert from 'Eigen::Replicate<Derived,-1,-1>' to 'Eigen::Map<Eigen::Matrix<double,1,-1,1,1,-1>,0,Eigen::Stride<0,0>>'
GCC также жалуется. no matching function for call (не могу скопировать&Вставьте точное сообщение, как на другой машине).

Я делаю это слишком сложно? Должно ли работать карта?

3

Решение

Map может работать только с матрицами, а не с выражениями. Так замени auto result2 от MatrixXd result2, и вы сделали. Увидеть общие подводные камни.

2

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

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

По вопросам рекламы [email protected]