5 #ifndef COSAN_MISSINGVALUES_H
6 #define COSAN_MISSINGVALUES_H
12 template<Numeric NumericType>
22 fmt::print(
"*********************************\n");
23 fmt::print(
"Begin cleaning up missing data!\n");
24 std::set<gsl::index> MissingIdxX;
31 for (
auto &i : MissingIdxX ){
32 gsl::index _numofMissing = X.col(i).array().isNaN().template cast<NumericType>().sum();
33 fmt::print(
"For X Column {:d} has {:d} missing value(s).\n",i,_numofMissing);
34 NumericType mean = X.col(i).unaryExpr([](
NumericType v) {
return std::isnan(v)? 0 : v; }).sum()/(X.rows()-_numofMissing);
35 fmt::print(
"Fill the missing/nan entry with the column mean={:f}.\n",mean);
36 X.col(i) = X.col(i).array().isNaN().select(0,X.col(i)).array()+mean*(X.col(i).array().isNaN().template cast<NumericType>());
39 if (HasMissingIdxY==
true){
42 gsl::index _numofMissing = Y.col(i).array().isNaN().template cast<NumericType>().sum();
43 fmt::print(
"For Y has {:d} missing value(s).\n",_numofMissing);
45 NumericType mean = Y.col(i).unaryExpr([](
NumericType v) {
return std::isnan(v)? 0 : v; }).sum()/(Y.rows()-_numofMissing);
46 fmt::print(
"Fill the missing/nan entry with the column mean={:f}.\n",mean);
47 Y.col(i) = Y.col(i).array().isNaN().select(0,Y.col(i)).array()+mean*(Y.col(i).array().isNaN().template cast<NumericType>());
53 fmt::print(
"End of cleaning process\n");
54 fmt::print(
"*********************************\n");
67 #endif //COSAN_MISSINGVALUES_H