You can easily compute the mean and the variance matrix of multidimensional data.
Assume we are handling this kind of data 
typedef CArrayVector<double, 4> Spectrum;
  repeated in space and time. The data are stored in an array 
typedef CArray<Spectrum> ArraySpectrum;
ArraySpectrum datait;
  and we want to compute at each time the (multidimensional) mean of this data set. This can be used using the following code : 
typedef CArrayPoint<Spectrum> PointSpectrum;
PointSpectrum mut(datait.cols());
for (int t= datait.beginCols(); t< datait.endCols(); ++t)
{
  mut[t] = 0.;
  for (int i=datait_.beginRows(); i< datait_.endRows(); ++i)
  { mut[t] += datait_(i,t);}
  mut[t]/= data.sizeRows();
}
  The variance matrix (using numerical correction) can be computed using the following code : 
typedef CArraySquare<double, 4> CovSpectrum;
typedef CArrayPoint<CovSpectrum> PointCov;
PointSpectrum sigmat(datait.cols());
for (int t= datait.beginCols(); t< datait.endCols(); ++t)
{
  CovSpectrum var; var=0.0;
  Spectrum sum = 0.0;
  for (int i=datait_.beginRows(); i< datait_.endRows(); ++i)
  {
    Spectrum dev;
    sum += (dev = datait(i,t) - mut[t]);
    var += dev * dev.transpose();
  }
  sigmat[t] = (var - ((sum * sum.transpose())/datait.sizeCols()) )/datait.sizeCols();
}
  stk++ handles transparently the multidimensional nature of the data.
- See also
- STK::Stat::mean, STK::Stat::varianceWithFixedMean