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
6464 typedef Eigen::SparseQRMatrixQTransposeReturnType<SparseQRType>
6565 QTransposeType;
6666 typedef Eigen::SparseQRMatrixQReturnType<SparseQRType> QType;
67+ typedef typename SparseQRType::QRMatrixType QRMatrixType;
6768 typedef Eigen::VectorXd VectorXd;
6869 typedef Eigen::MatrixXd MatrixXd;
6970
@@ -92,9 +93,21 @@ struct SparseQRMatrixQReturnTypeVisitor
9293 +[](const QType& self) -> QTransposeType { return self.adjoint (); })
9394
9495 .def (
95- " transpose" , +[](const QType& self) -> QTransposeType {
96+ " transpose" ,
97+ +[](const QType& self) -> QTransposeType {
9698 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." );
98111 }
99112
100113 static void expose () {
Original file line number Diff line number Diff line change 7272QtAP = Qt @ A_permuted
7373R_dense = spqr .matrixR ().toarray ()
7474assert 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