static void sdev(const AzSmat *m, AzDvect *v_sdev) { AzDvect v_avg(m->rowNum()), v_avg2(m->rowNum()); int cx; for (cx = 0; cx < m->colNum(); ++cx) { v_avg.add(m->col(cx)); AzDvect v(m->col(cx)); v.square(); v_avg2.add(&v); } v_avg.divide(m->colNum()); v_avg2.divide(m->colNum()); v_sdev->reform(m->rowNum()); AzDvect::sdev(&v_avg, &v_avg2, v_sdev); }
/*-------------------------------------------------------------*/ void AzDmat::average_sdev(AzDvect *v_avg, AzDvect *v_sdev) const { v_avg->reform(row_num); if (v_sdev != NULL) v_sdev->reform(row_num); if (col_num <= 0) return; AzDvect v_avg2(row_num); int cx; for (cx = 0; cx < col_num; ++cx) { v_avg->add(col(cx)); if (v_sdev != NULL) { AzDvect v(col(cx)); v.square(); v_avg2.add(&v); } } v_avg->divide((double)col_num); if (v_sdev != NULL) { v_avg2.divide((double)col_num); AzDvect::sdev(v_avg, &v_avg2, v_sdev); } }