EmbeddingResult embed(const LMatrixType& lhs, const RMatrixType& rhs, IndexType target_dimension, unsigned int skip) { timed_context context("ARPACK DSXUPD generalized eigendecomposition"); #ifndef TAPKEE_NO_ARPACK ArpackGeneralizedSelfAdjointEigenSolver<LMatrixType, RMatrixType, MatrixTypeOperation> arpack(lhs,rhs,target_dimension+skip,"SM"); if (arpack.info() == Eigen::Success) { stringstream ss; ss << "Took " << arpack.getNbrIterations() << " iterations."; LoggingSingleton::instance().message_info(ss.str()); DenseMatrix embedding_feature_matrix = (arpack.eigenvectors()).block(0,skip,lhs.cols(),target_dimension); return EmbeddingResult(embedding_feature_matrix,arpack.eigenvalues().tail(target_dimension)); } else { throw eigendecomposition_error("eigendecomposition failed"); } return EmbeddingResult(); #else return EmbeddingResult(); #endif }
EigendecompositionResult eigendecomposition_impl_arpack(const MatrixType& wm, IndexType target_dimension, unsigned int skip) { timed_context context("ARPACK eigendecomposition"); ArpackGeneralizedSelfAdjointEigenSolver<MatrixType, MatrixType, MatrixOperationType> arpack(wm,target_dimension+skip,MatrixOperationType::ARPACK_CODE); if (arpack.info() == Eigen::Success) { std::stringstream ss; ss << "Took " << arpack.getNbrIterations() << " iterations."; LoggingSingleton::instance().message_info(ss.str()); DenseMatrix selected_eigenvectors = arpack.eigenvectors().rightCols(target_dimension); return EigendecompositionResult(selected_eigenvectors,arpack.eigenvalues().tail(target_dimension)); } else { throw eigendecomposition_error("eigendecomposition failed"); } return EigendecompositionResult(); }
EigendecompositionResult generalized_eigendecomposition_impl_arpack(const LMatrixType& lhs, const RMatrixType& rhs, IndexType target_dimension, unsigned int skip) { timed_context context("ARPACK DSXUPD generalized eigendecomposition"); ArpackGeneralizedSelfAdjointEigenSolver<LMatrixType, RMatrixType, MatrixOperationType> arpack(lhs,rhs,target_dimension+skip,"SM"); if (arpack.info() == Eigen::Success) { std::string message = formatting::format("Took {} iterations.", arpack.getNbrIterations()); LoggingSingleton::instance().message_info(message); DenseMatrix selected_eigenvectors = (arpack.eigenvectors()).rightCols(target_dimension); return EigendecompositionResult(selected_eigenvectors,arpack.eigenvalues().tail(target_dimension)); } else { throw eigendecomposition_error("eigendecomposition failed"); } return EigendecompositionResult(); }
EmbeddingResult embed(const LMatrixType& lhs, const RMatrixType& rhs, unsigned int target_dimension, unsigned int skip) { timed_context context("ARPACK DSXUPD generalized eigendecomposition"); #ifndef TAPKEE_NO_ARPACK ArpackGeneralizedSelfAdjointEigenSolver<LMatrixType, RMatrixType, MatrixTypeOperation> arpack(lhs,rhs,target_dimension+skip,"SM"); DenseMatrix embedding_feature_matrix = (arpack.eigenvectors()).block(0,skip,lhs.cols(),target_dimension); return EmbeddingResult(embedding_feature_matrix,arpack.eigenvalues().tail(target_dimension)); #else return EmbeddingResult(); #endif }