@@ -520,7 +520,6 @@ template <typename VariationalSolver> class fPCA {
520520 using smoother_t = std::decay_t <VariationalSolver>;
521521 using vector_t = Eigen::Matrix<double , Dynamic, 1 >;
522522 using matrix_t = Eigen::Matrix<double , Dynamic, Dynamic>;
523- using data_t = Eigen::Map<const Eigen::Matrix<double , Dynamic, Dynamic, Eigen::ColMajor>>;
524523 using binary_t = BinaryMatrix<Dynamic, Dynamic>;
525524 static constexpr int n_lambda = smoother_t ::n_lambda;
526525 public:
@@ -533,12 +532,14 @@ template <typename VariationalSolver> class fPCA {
533532 template <typename ... Args> void discretize (Args&&... args) {
534533 smoother_.discretize (std::forward<Args>(args)...);
535534 n_dofs_ = smoother_.n_dofs ();
535+ return ;
536536 }
537537 template <typename GeoFrame> void analyze_data (const std::string& colname, const GeoFrame& gf) {
538538 fdapde_assert (gf.n_layers () == 1 );
539539 data_ = gf[0 ].data ().template col <double >(colname).as_matrix ();
540540 n_locs_ = data_.rows ();
541541 n_units_ = data_.cols ();
542+ smoother_.analyze_data (gf, vector_t::Ones (gf[0 ].rows ()).asDiagonal ());
542543 // detect if data_ has at least one missing value
543544 has_nan_ = false ;
544545 for (int i = 0 ; i < n_locs_; ++i) {
@@ -549,6 +550,7 @@ template <typename VariationalSolver> class fPCA {
549550 }
550551 }
551552 }
553+ return ;
552554 }
553555
554556 template <typename LambdaT, typename Policy = fpca_power_solver>
@@ -588,7 +590,7 @@ template <typename VariationalSolver> class fPCA {
588590 const std::vector<double >& loadings_norm () const { return f_norm_; }
589591 const matrix_t & lambda () const { return lambda_; }
590592 private:
591- data_t data_; // mapped geoframe data
593+ matrix_t data_; // mapped geoframe data
592594 smoother_t smoother_; // variational solver used in the smoothing step
593595 bool has_nan_;
594596
0 commit comments