diff --git a/ProcessLib/Utils/TransposeInPlace.h b/ProcessLib/Utils/TransposeInPlace.h index 163ebf9713f2800ae344744777a130f1d04926b3..6b8b338ef5a58f1d940a9ca8885465aee3397336 100644 --- a/ProcessLib/Utils/TransposeInPlace.h +++ b/ProcessLib/Utils/TransposeInPlace.h @@ -37,4 +37,32 @@ std::vector<double> transposeInPlace( return result; } +template <int Components> +void transposeInPlace(std::vector<double>& values) +{ + MathLib::toMatrix< + Eigen::Matrix<double, Eigen::Dynamic, Components, Eigen::RowMajor>>( + values, values.size() / Components, Components) = + MathLib::toMatrix< + Eigen::Matrix<double, Components, Eigen::Dynamic, Eigen::RowMajor>>( + values, Components, values.size() / Components) + .transpose() + .eval(); +} + +inline void transposeInPlace(std::vector<double>& values, + unsigned const num_components) +{ + MathLib::toMatrix< + Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>( + values, values.size() / num_components, num_components) = + MathLib::toMatrix<Eigen::Matrix<double, + Eigen::Dynamic, + Eigen::Dynamic, + Eigen::RowMajor>>( + values, num_components, values.size() / num_components) + .transpose() + .eval(); +} + } // namespace ProcessLib