mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 08:34:37 +08:00
Added support and tests: row and column blocks for sparse matrix
transpose. Change-Id: Ife641b08a9e86826478521a405f21ba60667f0e8
This commit is contained in:
@@ -377,6 +377,9 @@ CompressedRowSparseMatrix* CompressedRowSparseMatrix::Transpose() const {
|
||||
}
|
||||
transpose_rows[0] = 0;
|
||||
|
||||
*(transpose->mutable_row_blocks()) = col_blocks_;
|
||||
*(transpose->mutable_col_blocks()) = row_blocks_;
|
||||
|
||||
return transpose;
|
||||
}
|
||||
|
||||
|
||||
@@ -338,10 +338,22 @@ TEST(CompressedRowSparseMatrix, Transpose) {
|
||||
// 13 0 14 15 9 0
|
||||
// 0 16 17 0 0 0
|
||||
|
||||
// Block structure:
|
||||
// A A A A B B
|
||||
// A A A A B B
|
||||
// A A A A B B
|
||||
// C C C C D D
|
||||
// C C C C D D
|
||||
// C C C C D D
|
||||
|
||||
CompressedRowSparseMatrix matrix(5, 6, 30);
|
||||
int* rows = matrix.mutable_rows();
|
||||
int* cols = matrix.mutable_cols();
|
||||
double* values = matrix.mutable_values();
|
||||
matrix.mutable_row_blocks()->push_back(3);
|
||||
matrix.mutable_row_blocks()->push_back(3);
|
||||
matrix.mutable_col_blocks()->push_back(4);
|
||||
matrix.mutable_col_blocks()->push_back(2);
|
||||
|
||||
rows[0] = 0;
|
||||
cols[0] = 1;
|
||||
@@ -376,6 +388,16 @@ TEST(CompressedRowSparseMatrix, Transpose) {
|
||||
|
||||
scoped_ptr<CompressedRowSparseMatrix> transpose(matrix.Transpose());
|
||||
|
||||
ASSERT_EQ(transpose->row_blocks().size(), matrix.col_blocks().size());
|
||||
for (int i = 0; i < transpose->row_blocks().size(); ++i) {
|
||||
EXPECT_EQ(transpose->row_blocks()[i], matrix.col_blocks()[i]);
|
||||
}
|
||||
|
||||
ASSERT_EQ(transpose->col_blocks().size(), matrix.row_blocks().size());
|
||||
for (int i = 0; i < transpose->col_blocks().size(); ++i) {
|
||||
EXPECT_EQ(transpose->col_blocks()[i], matrix.row_blocks()[i]);
|
||||
}
|
||||
|
||||
Matrix dense_matrix;
|
||||
matrix.ToDenseMatrix(&dense_matrix);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user