void Stats::Impl::computeSums(const Stats::data_type& data) { if (data.size()>0) D_ = data[0].size(); sumData_ = Stats::vector_type(D_); sumOuterProducts_ = Stats::matrix_type(D_, D_); sumData_.clear(); sumOuterProducts_.clear(); for (Stats::data_type::const_iterator it=data.begin(); it!=data.end(); ++it) { if (it->size() != D_) { ostringstream message; message << "[Stats::Impl::computeSums()] " << D_ << "-dimensional data expected: " << *it; throw runtime_error(message.str()); } sumData_ += *it; sumOuterProducts_ += outer_prod(*it, *it); } }
Stats::Impl::Impl(const Stats::data_type& data) : D_(0), N_(data.size()) { computeSums(data); }