File tree Expand file tree Collapse file tree 2 files changed +36
-2
lines changed
include/eigenpy/decompositions/sparse
unittest/python/decompositions/sparse Expand file tree Collapse file tree 2 files changed +36
-2
lines changed Original file line number Diff line number Diff line change @@ -64,6 +64,7 @@ struct SparseQRMatrixQReturnTypeVisitor
64
64
typedef Eigen::SparseQRMatrixQTransposeReturnType<SparseQRType>
65
65
QTransposeType;
66
66
typedef Eigen::SparseQRMatrixQReturnType<SparseQRType> QType;
67
+ typedef typename SparseQRType::QRMatrixType QRMatrixType;
67
68
typedef Eigen::VectorXd VectorXd;
68
69
typedef Eigen::MatrixXd MatrixXd;
69
70
@@ -92,9 +93,21 @@ struct SparseQRMatrixQReturnTypeVisitor
92
93
+[](const QType& self) -> QTransposeType { return self.adjoint (); })
93
94
94
95
.def (
95
- " transpose" , +[](const QType& self) -> QTransposeType {
96
+ " transpose" ,
97
+ +[](const QType& self) -> QTransposeType {
96
98
return self.transpose ();
97
- });
99
+ })
100
+
101
+ .def (
102
+ " toSparse" ,
103
+ +[](QType& self) -> QRMatrixType {
104
+ Eigen::Index m = self.rows ();
105
+ MatrixXd I = MatrixXd::Identity (m, m);
106
+ MatrixXd Q_dense = self * I;
107
+ return Q_dense.sparseView ();
108
+ },
109
+ bp::arg (" self" ),
110
+ " Convert the Q matrix to a sparse matrix representation." );
98
111
}
99
112
100
113
static void expose () {
Original file line number Diff line number Diff line change 72
72
QtAP = Qt @ A_permuted
73
73
R_dense = spqr .matrixR ().toarray ()
74
74
assert eigenpy .is_approx (QtAP , R_dense )
75
+
76
+ Q_sparse = Q .toSparse ()
77
+ R_sparse = R
78
+
79
+ assert Q_sparse .shape == (dim , dim )
80
+
81
+ QtQ_sparse = Q_sparse .T @ Q_sparse
82
+ QQt_sparse = Q_sparse @ Q_sparse .T
83
+ I_sparse = spa .identity (dim , format = "csc" )
84
+
85
+ assert eigenpy .is_approx (QtQ_sparse .toarray (), I_sparse .toarray ())
86
+ assert eigenpy .is_approx (QQt_sparse .toarray (), I_sparse .toarray ())
87
+
88
+ Q_sparse_test_vec = Q_sparse @ test_vec
89
+ assert eigenpy .is_approx (Qv , Q_sparse_test_vec )
90
+
91
+ Q_sparse_test_matrix = Q_sparse @ test_matrix
92
+ assert eigenpy .is_approx (QM , Q_sparse_test_matrix )
93
+
94
+ QR_sparse = Q_sparse @ R_sparse .toarray ()
95
+ assert eigenpy .is_approx (QR_sparse , A_permuted )
You can’t perform that action at this time.
0 commit comments