Boost logo

Ublas :

From: Jerry Swan (pmxjs_at_[hidden])
Date: 2006-08-18 14:03:00

Given a matrix D with dimensions nvars by ncases and a vector m containing the mean values of each row of D, I wish to calculate the standardized covariance of D, i.e. to form a covariance matrix with zero mean. If I were merely concerned with the unstandardized covariance matrix, I understand that I could efficiently calculate it as follows: matrix<real> covar = prod(D,trans(D))/ncases; The code for explicitly calculating the standardized variant appears below. Is there some variant of the above that would allow this to be more efficiently calculated using ublas? for( icase=0; icase<ncases; ++icase ) { // Cumulate covariances for( var=0 ; var<nvars; ++var ) { diff1 = data( icase, var ) - means[var]; for( var2=var; var2<nvars; ++var2 ) { diff2 = data( icase, var2 ) - means[var2]; covar( var2, var ) += diff1 * diff2; } } } for( var=0; var<nvars; ++var ) { // Divide sums by n for( var2=var; var2<nvars; ++var2 ) { covar( var2, var ) /= ncases; // symmetrically duplicate if( var != var2 ) covar( var, var2 ) = covar( var2, var ); } } Regards, Jerry. This message has been checked for viruses but the contents of an attachment may still contain software viruses, which could damage your computer system: you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation.