1
В MATLAB, я могу сделать следующийEigen3 Flatten Матрица как вектор
A = [1 2 3; 4 5 6];
A(:)
получить:
ans =
1
4
2
5
3
6
Как я сделал бы это с Eigen3 Матрицей?
В MATLAB, я могу сделать следующийEigen3 Flatten Матрица как вектор
A = [1 2 3; 4 5 6];
A(:)
получить:
ans =
1
4
2
5
3
6
Как я сделал бы это с Eigen3 Матрицей?
Лучший способ заключается в использовании карты:
Map<VectorXd> v(A.data(),A.size());
, потому что в этом случае Эйген знает во время компиляции, что теперь у вас есть 1D вектор.
Конечно, результат будет зависеть от порядка хранения А, то есть, для столбца основной матрицы (по умолчанию):
[1 4 2 5 3 6]^T
и для ряда-главный из них:
[1 2 3 4 5 6]^T
Второе предложение - плохая идея, потому что предполагается, что A хранится внутри в основном формате, без смещения между строками. В простом примере выше это всегда будет верно, но в других случаях этого не будет. –
Это 'resize()', который вы хотите использовать, 'conservativeResize()' не будет работать. См. Правильный ответ здесь: http://stackoverflow.com/questions/22881768/eigen-convert-matrix-to-vector – YvesgereY
hm, я слишком быстро из этого, вы правы консервативныхResize не будет работать здесь. – ggael