本文整理汇总了C++中MatrixDouble::getMean方法的典型用法代码示例。如果您正苦于以下问题:C++ MatrixDouble::getMean方法的具体用法?C++ MatrixDouble::getMean怎么用?C++ MatrixDouble::getMean使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MatrixDouble
的用法示例。
在下文中一共展示了MatrixDouble::getMean方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: restingDataCollected
CalibrateResult restingDataCollected(const MatrixDouble& data) {
// take average of X and Y acceleration as the zero G value
zeroG = (data.getMean()[0] + data.getMean()[1]) / 2;
oneG = data.getMean()[2]; // use Z acceleration as one G value
double range = abs(oneG - zeroG);
vector<double> stddev = data.getStdDev();
if (stddev[0] / range > 0.05 ||
stddev[1] / range > 0.05 ||
stddev[2] / range > 0.05)
return CalibrateResult(CalibrateResult::WARNING,
"Accelerometer readings are noisy, check circuit.");
return CalibrateResult::SUCCESS;
}
示例2: restingDataCollected
CalibrateResult restingDataCollected(const MatrixDouble& data)
{
// take average of X and Y acceleration as the zero G value
zeroG = (data.getMean()[0] + data.getMean()[1]) / 2;
oneG = data.getMean()[2]; // use Z acceleration as one G value
double range = abs(oneG - zeroG);
vector<double> stddev = data.getStdDev();
if (stddev[0] / range > 0.05 ||
stddev[1] / range > 0.05 ||
stddev[2] / range > 0.05)
return CalibrateResult(CalibrateResult::WARNING,
"Accelerometer seemed to be moving; consider recollecting the "
"calibration sample.");
if (abs(data.getMean()[0] - data.getMean()[1]) / range > 0.1)
return CalibrateResult(CalibrateResult::WARNING,
"X and Y axes differ by " + std::to_string(
abs(data.getMean()[0] - data.getMean()[1]) / range * 100) +
" percent. Check that accelerometer is flat.");
return CalibrateResult::SUCCESS;
}
示例3: computeFeatureVector_
bool PrincipalComponentAnalysis::computeFeatureVector_(const MatrixDouble &data,const UINT analysisMode) {
trained = false;
const UINT M = data.getNumRows();
const UINT N = data.getNumCols();
this->numInputDimensions = N;
MatrixDouble msData( M, N );
//Compute the mean and standard deviation of the input data
mean = data.getMean();
stdDev = data.getStdDev();
if( normData ) {
//Normalize the data
for(UINT i=0; i<M; i++)
for(UINT j=0; j<N; j++)
msData[i][j] = (data[i][j]-mean[j]) / stdDev[j];
} else {
//Mean Subtract Data
for(UINT i=0; i<M; i++)
for(UINT j=0; j<N; j++)
msData[i][j] = data[i][j] - mean[j];
}
//Get the covariance matrix
MatrixDouble cov = msData.getCovarianceMatrix();
//Use Eigen Value Decomposition to find eigenvectors of the covariance matrix
EigenvalueDecomposition eig;
if( !eig.decompose( cov ) ) {
mean.clear();
stdDev.clear();
componentWeights.clear();
sortedEigenvalues.clear();
eigenvectors.clear();
errorLog << "computeFeatureVector(const MatrixDouble &data,UINT analysisMode) - Failed to decompose input matrix!" << endl;
return false;
}
//Get the eigenvectors and eigenvalues
eigenvectors = eig.getEigenvectors();
VectorDouble eigenvalues = eig.getRealEigenvalues();
//Any eigenvalues less than 0 are not worth anything so set to 0
for(UINT i=0; i<eigenvalues.size(); i++) {
if( eigenvalues[i] < 0 )
eigenvalues[i] = 0;
}
//Sort the eigenvalues and compute the component weights
double sum = 0;
UINT componentIndex = 0;
sortedEigenvalues.clear();
componentWeights.resize(N,0);
while( true ) {
double maxValue = 0;
UINT index = 0;
for(UINT i=0; i<eigenvalues.size(); i++) {
if( eigenvalues[i] > maxValue ) {
maxValue = eigenvalues[i];
index = i;
}
}
if( maxValue == 0 || componentIndex >= eigenvalues.size() ) {
break;
}
sortedEigenvalues.push_back( IndexedDouble(index,maxValue) );
componentWeights[ componentIndex++ ] = eigenvalues[ index ];
sum += eigenvalues[ index ];
eigenvalues[ index ] = 0; //Set the maxValue to zero so it won't be used again
}
double cumulativeVariance = 0;
switch( analysisMode ) {
case MAX_VARIANCE:
//Normalize the component weights and workout how many components we need to use to reach the maxVariance
numPrincipalComponents = 0;
for(UINT k=0; k<N; k++) {
componentWeights[k] /= sum;
cumulativeVariance += componentWeights[k];
if( cumulativeVariance >= maxVariance && numPrincipalComponents==0 ) {
numPrincipalComponents = k+1;
}
}
break;
case MAX_NUM_PCS:
//Normalize the component weights and compute the maxVariance
maxVariance = 0;
for(UINT k=0; k<N; k++) {
componentWeights[k] /= sum;
if( k < numPrincipalComponents ) {
maxVariance += componentWeights[k];
}
}
break;
default:
//.........这里部分代码省略.........
示例4: main
int main (int argc, const char * argv[])
{
//Create an empty matrix double
MatrixDouble matrix;
//Resize the matrix
matrix.resize( 100, 2 );
//Set all the values in the matrix to zero
matrix.setAllValues( 0 );
//Loop over the data and set the values to random values
UINT counter = 0;
for(UINT i=0; i<matrix.getNumRows(); i++){
for(UINT j=0; j<matrix.getNumCols(); j++){
matrix[i][j] = counter++;
}
}
//Add a new row at the very end of the matrix
VectorDouble newRow(2);
newRow[0] = 1000;
newRow[1] = 2000;
matrix.push_back( newRow );
//Print the values
cout << "Matrix Data: \n";
for(UINT i=0; i<matrix.getNumRows(); i++){
for(UINT j=0; j<matrix.getNumCols(); j++){
cout << matrix[i][j] << "\t";
}
cout << endl;
}
cout << endl;
//Get the second row as a vector
VectorDouble rowVector = matrix.getRowVector( 1 );
cout << "Row Vector Data: \n";
for(UINT i=0; i<rowVector.size(); i++){
cout << rowVector[i] << "\t";
}
cout << endl;
//Get the second column as a vector
VectorDouble colVector = matrix.getColVector( 1 );
cout << "Column Vector Data: \n";
for(UINT i=0; i<colVector.size(); i++){
cout << colVector[i] << "\n";
}
cout << endl;
//Get the mean of each column
VectorDouble mean = matrix.getMean();
cout << "Mean: \n";
for(UINT i=0; i<mean.size(); i++){
cout << mean[i] << "\n";
}
cout << endl;
//Get the Standard Deviation of each column
VectorDouble stdDev = matrix.getStdDev();
cout << "StdDev: \n";
for(UINT i=0; i<stdDev.size(); i++){
cout << stdDev[i] << "\n";
}
cout << endl;
//Get the covariance matrix
MatrixDouble cov = matrix.getCovarianceMatrix();
cout << "Covariance Matrix: \n";
for(UINT i=0; i<cov.getNumRows(); i++){
for(UINT j=0; j<cov.getNumCols(); j++){
cout << cov[i][j] << "\t";
}
cout << endl;
}
cout << endl;
vector< MinMax > ranges = matrix.getRanges();
cout << "Ranges: \n";
for(UINT i=0; i<ranges.size(); i++){
cout << "i: " << i << "\tMinValue: " << ranges[i].minValue << "\tMaxValue:" << ranges[i].maxValue << "\n";
}
cout << endl;
//Save the matrix data to a csv file
matrix.save( "data.csv" );
//load the matrix data from a csv file
matrix.load( "data.csv" );
return EXIT_SUCCESS;
}