inline static void Initialize(const MatType& V, const size_t r, arma::mat& W, arma::mat& H) { const size_t n = V.n_rows; const size_t m = V.n_cols; double avgV = 0; size_t count = 0; double min = DBL_MAX; // Iterate over all elements in the matrix (for sparse matrices, this only // iterates over nonzeros). for (typename MatType::const_row_col_iterator it = V.begin(); it != V.end(); ++it) { ++count; avgV += *it; // Track the minimum value. if (*it < min) min = *it; } avgV = sqrt(((avgV / (n * m)) - min) / r); // Initialize to random values. W.randu(n, r); H.randu(r, m); W = W + avgV; H = H + avgV; }
inline static void Initialize(const MatType& V, const size_t r, arma::mat& W, arma::mat& H) { size_t n = V.n_rows; size_t m = V.n_cols; double V_avg = 0; size_t count = 0; double min = DBL_MAX; for(typename MatType::const_row_col_iterator it = V.begin();it != V.end();it++) { if(*it != 0) { count++; V_avg += *it; if(*it < min) min = *it; } } V_avg = sqrt(((V_avg / (n * m)) - min) / r); // Intialize to random values. W.randu(n, r); H.randu(r, m); W = W + V_avg; H = H + V_avg; }