2014-01-28 2 views

ответ

1

Лучший способ заключается в использовании карты:

Map<VectorXd> v(A.data(),A.size()); 

, потому что в этом случае Эйген знает во время компиляции, что теперь у вас есть 1D вектор.

Конечно, результат будет зависеть от порядка хранения А, то есть, для столбца основной матрицы (по умолчанию):

[1 4 2 5 3 6]^T 

и для ряда-главный из них:

[1 2 3 4 5 6]^T 
+1

Второе предложение - плохая идея, потому что предполагается, что A хранится внутри в основном формате, без смещения между строками. В простом примере выше это всегда будет верно, но в других случаях этого не будет. –

+0

Это 'resize()', который вы хотите использовать, 'conservativeResize()' не будет работать. См. Правильный ответ здесь: http://stackoverflow.com/questions/22881768/eigen-convert-matrix-to-vector – YvesgereY

+0

hm, я слишком быстро из этого, вы правы консервативныхResize не будет работать здесь. – ggael

Смежные вопросы