Eigen: concatenate matrix along a specific dimension

Eigen::MatrixXd V_src, V_target, V_merged;
V_merged.resize(V_src.rows() + V_target.rows(), 3);
V_merged << V_target, V_src;

Advertisements

is Eigen make a deep copy of matrix?


void testSparseMatrix()
{ 
using namespace Eigen; 
using namespace std;
 typedef Triplet Trip;
 std::vector trp, tmp;
 // I subtracted 1 from the indices so that the output matches your question trp.push_back(Trip(1 - 1, 1 - 1, 3));
 trp.push_back(Trip(1 - 1, 3 - 1, 4)); 
trp.push_back(Trip(2 - 1, 3 - 1, 1)); 
trp.push_back(Trip(3 - 1, 2 - 1, 2));
 trp.push_back(Trip(3 - 1, 4 - 1, 5));
 trp.push_back(Trip(4 - 1, 1 - 1, 4)); 
int rows, cols; 
rows = cols = 4; 
SparseMatrix A(rows, cols);
 A.setFromTriplets(trp.begin(), trp.end()); 
cout &lt;&lt; "Matrix from triplets:" &lt;&lt; endl;
 cout &lt;&lt; A &lt;&lt; endl; cout &lt;&lt; endl &lt;&lt; "Triplets:" &lt;&lt; endl;
 cout &lt;&lt; "Row\tCol\tVal" &lt;&lt; endl; 
for (int k = 0; k &lt; A.outerSize(); ++k) 
{ 
for (SparseMatrix::InnerIterator it(A, k); it; ++it) 
{ 
cout &lt;&lt; 1 + it.row() &lt;&lt; "\t"; // row index 
cout &lt;&lt; 1 + it.col() &lt;&lt; "\t"; // col index (here it is equal to k)
 cout &lt;&lt; it.value() &lt;&lt; endl;
 } 
} 
////////////////////////// 
SparseMatrix B; B = A; 
std::cout &lt;&lt; "A\n" &lt;&lt; Eigen::MatrixXi(A) &lt;&lt; std::endl;
 std::cout &lt;&lt; "B\n" &lt;&lt; Eigen::MatrixXi(B) &lt;&lt; std::endl;
 B.coeffRef(0, 0) = 98; 
std::cout &lt;&lt; "A\n" &lt;&lt; Eigen::MatrixXi(A) &lt;&lt; std::endl;
 std::cout &lt;&lt; "B\n" &lt;&lt; Eigen::MatrixXi(B) &lt;&lt; std::endl;
 std::cin.get();
}

output:

Matrix from triplets:
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0

 

Triplets:
Row Col Val
1 1 3
4 1 4
3 2 2
1 3 4
2 3 1
3 4 5
A
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0
B
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0
A
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0
B
98 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0