2014-10-11 4 views
1

У меня есть 3 вертикальные собственные матрицы, и я хотел бы их конкатенировать, как в matlab C=[B1; B2; B3];. Я хочу, чтобы объединить их, и в этом случае: C(B1.cols()+B2.cols()+B3.cols(),1)Как конкатенировать матрицу?

MatrixXd B1,B2,B3; 
C<<B1,B2,B3; 

Есть ли что-нибудь эквивалент в Эйгене?

+0

Говоря вертикальный матрица, вы имеете в виду векторы? – CroCo

ответ

0

Libigl предоставляет функцию igl::cat. Может быть, это сработает.

1

Это не очень понятно из Вашего вопроса, но я понял, как вам нужно сцепить 3 вертикальные матрицы размера (п, 1) производить матрицу размера (м, 1), где m - это сумма всех n.

Если да, то чем вы можете попробовать следующее:

MatrixXd C(B1.rows() + B2.rows() + B3.rows(), 1); 
C << B1, B2, B3; 

Например, этот код:

Eigen::MatrixXd B1(3, 1); 
B1 << 1, 2, 3; 

Eigen::MatrixXd B2(3, 1); 
B2 << 42, 43, 44; 

Eigen::MatrixXd B3(3, 1); 
B3 << -1, -2, -3; 

MatrixXd C(B1.rows() + B2.rows() + B3.rows(), 1); 
C << B1, B2, B3; 
std::cout << "Rows: " << C.rows() << std::endl; 
std::cout << "Columns: " << C.cols() << std::endl << std::endl; 
std::cout << C << std::endl; 

будет производить следующий вывод:

Rows: 9 
Columns: 1 

1 
2 
3 
42 
43 
44 
-1 
-2 
-3 
+0

В чем разница между вашим решением и заявленным OP? – CroCo