diff --git a/src/shogun/preprocessor/PCA.cpp b/src/shogun/preprocessor/PCA.cpp index 13cf7d6bd0b..823765919ba 100644 --- a/src/shogun/preprocessor/PCA.cpp +++ b/src/shogun/preprocessor/PCA.cpp @@ -13,6 +13,7 @@ #ifdef HAVE_LAPACK #include #include +#ifdef HAVE_EIGEN3 #include #include #include @@ -177,7 +178,6 @@ void CPCA::cleanup() m_transformation_matrix=SGMatrix(); } -#ifdef HAVE_EIGEN3 SGMatrix CPCA::apply_to_feature_matrix(CFeatures* features) { ASSERT(m_initialized) @@ -186,25 +186,32 @@ SGMatrix CPCA::apply_to_feature_matrix(CFeatures* features) int32_t num_features = m.num_rows; SG_INFO("get Feature matrix: %ix%i\n", num_vectors, num_features) - SGMatrix result_matrix = SGMatrix(num_dim, num_vectors); - Map final_feature_matrix(result_matrix.matrix, num_dim, num_vectors); - if (m.matrix) { SG_INFO("Preprocessing feature matrix\n") Map feature_matrix(m.matrix, num_features, num_vectors); VectorXd data_mean = feature_matrix.rowwise().sum()/(float64_t) num_vectors; - MatrixXd feature_matrix_centered = feature_matrix.colwise()-data_mean; - + feature_matrix = feature_matrix.colwise()-data_mean; + SG_INFO("Transforming feature matrix\n") Map transform_matrix(m_transformation_matrix.matrix, m_transformation_matrix.num_rows, m_transformation_matrix.num_cols); - final_feature_matrix = transform_matrix.transpose()*feature_matrix_centered; + feature_matrix.block(0,0,num_dim,num_vectors) = transform_matrix.transpose()*feature_matrix; + + SG_INFO("Form matrix of target dimension") + for (int32_t col=0; col*) features)->set_feature_matrix(result_matrix); - return result_matrix; + + ((CDenseFeatures*) features)->set_feature_matrix(m); + return m; } -#endif //HAVE_EIGEN3 SGVector CPCA::apply_to_feature_vector(SGVector vector) { @@ -238,5 +245,5 @@ SGVector CPCA::get_mean() { return m_mean_vector; } - +#endif /* HAVE_EIGEN3 */ #endif /* HAVE_LAPACK */