|
1 | 1 | /* |
2 | | - * Copyright 2014-2019, CNRS |
3 | | - * Copyright 2018-2020, INRIA |
| 2 | + * Copyright 2014-2022 CNRS INRIA |
4 | 3 | */ |
5 | 4 |
|
6 | 5 | #include "eigenpy/eigenpy.hpp" |
@@ -94,6 +93,61 @@ Eigen::Matrix<Scalar,6,6> matrix6(const Scalar & value) |
94 | 93 | return ReturnType::Constant(value); |
95 | 94 | } |
96 | 95 |
|
| 96 | +template<typename Scalar> |
| 97 | +Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor> |
| 98 | +generateRowMajorMatrix(const Eigen::DenseIndex rows, |
| 99 | + const Eigen::DenseIndex cols) |
| 100 | +{ |
| 101 | + typedef Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor> RowMajorMatrix; |
| 102 | + RowMajorMatrix A(rows, cols); |
| 103 | + typedef Eigen::Matrix<Scalar,Eigen::Dynamic,1> Vector; |
| 104 | + Eigen::Map<Vector>(A.data(),A.size()) = Vector::LinSpaced(A.size(),1,A.size()); |
| 105 | + std::cout << "Matrix values:\n" << A << std::endl; |
| 106 | + return A; |
| 107 | +} |
| 108 | + |
| 109 | +template<typename Scalar> |
| 110 | +Eigen::Matrix<Scalar,1,Eigen::Dynamic,Eigen::RowMajor> |
| 111 | +generateRowMajorVector(const Eigen::DenseIndex size) |
| 112 | +{ |
| 113 | + typedef Eigen::Matrix<Scalar,1,Eigen::Dynamic,Eigen::RowMajor> RowMajorVector; |
| 114 | + RowMajorVector A(size); |
| 115 | + A.setLinSpaced(size,1,size); |
| 116 | + std::cout << "Vector values: " << A.transpose() << std::endl; |
| 117 | + return A; |
| 118 | +} |
| 119 | + |
| 120 | +template<typename Scalar> |
| 121 | +Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> |
| 122 | +generateColMajorMatrix(const Eigen::DenseIndex rows, |
| 123 | + const Eigen::DenseIndex cols) |
| 124 | +{ |
| 125 | + typedef Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> ColMajorMatrix; |
| 126 | + ColMajorMatrix A(rows, cols); |
| 127 | + typedef Eigen::Matrix<Scalar,Eigen::Dynamic,1> Vector; |
| 128 | + Eigen::Map<Vector>(A.data(),A.size()) = Vector::LinSpaced(A.size(),1,A.size()); |
| 129 | + std::cout << "Matrix values:\n" << A << std::endl; |
| 130 | + return A; |
| 131 | +} |
| 132 | + |
| 133 | +template<typename Scalar> |
| 134 | +Eigen::Matrix<Scalar,1,Eigen::Dynamic> |
| 135 | +generateColMajorVector(const Eigen::DenseIndex size) |
| 136 | +{ |
| 137 | + typedef Eigen::Matrix<Scalar,1,Eigen::Dynamic> ColMajorVector; |
| 138 | + ColMajorVector A(size); |
| 139 | + A.setLinSpaced(size,1,size); |
| 140 | + std::cout << "Vector values: " << A.transpose() << std::endl; |
| 141 | + return A; |
| 142 | +} |
| 143 | + |
| 144 | +template<typename Matrix, typename ReturnMatrix> |
| 145 | +ReturnMatrix |
| 146 | +copy(const Eigen::MatrixBase<Matrix> & mat) |
| 147 | +{ |
| 148 | + return mat; |
| 149 | +} |
| 150 | + |
97 | 151 | BOOST_PYTHON_MODULE(matrix) |
98 | 152 | { |
99 | 153 | using namespace Eigen; |
@@ -134,4 +188,16 @@ BOOST_PYTHON_MODULE(matrix) |
134 | 188 | bp::def("plain", plain<MatrixXd>); |
135 | 189 |
|
136 | 190 | bp::def("matrix6", matrix6<double>); |
| 191 | + |
| 192 | + bp::def("generateRowMajorMatrix", generateRowMajorMatrix<double>); |
| 193 | + bp::def("generateRowMajorVector", generateRowMajorVector<double>); |
| 194 | + |
| 195 | + bp::def("generateColMajorMatrix", generateColMajorMatrix<double>); |
| 196 | + bp::def("generateColMajorVector", generateColMajorVector<double>); |
| 197 | + |
| 198 | + typedef Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor> RowMajorMatrixXd; |
| 199 | + bp::def("asRowMajorFromColMajorMatrix", copy<Eigen::MatrixXd,RowMajorMatrixXd>); |
| 200 | + bp::def("asRowMajorFromColMajorVector", copy<Eigen::VectorXd,Eigen::RowVectorXd>); |
| 201 | + bp::def("asRowMajorFromRowMajorMatrix", copy<RowMajorMatrixXd,RowMajorMatrixXd>); |
| 202 | + bp::def("asRowMajorFromRowMajorVector", copy<Eigen::RowVectorXd,Eigen::RowVectorXd>); |
137 | 203 | } |
0 commit comments