change function signature to use references on cellValueStacks

This commit is contained in:
root676 2021-01-13 21:53:07 +01:00 committed by Nyall Dawson
parent a79cea5a25
commit 033dba2b22
2 changed files with 31 additions and 31 deletions

View File

@ -319,14 +319,14 @@ std::vector<double> QgsRasterAnalysisUtils::getCellValuesFromBlockStack( const s
return cellValues;
}
double QgsRasterAnalysisUtils::meanFromCellValues( std::vector<double> cellValues, int stackSize )
double QgsRasterAnalysisUtils::meanFromCellValues( std::vector<double> &cellValues, int stackSize )
{
double sum = std::accumulate( cellValues.begin(), cellValues.end(), 0.0 );
double mean = sum / static_cast<double>( stackSize );
return mean;
}
double QgsRasterAnalysisUtils::medianFromCellValues( std::vector<double> cellValues, int stackSize )
double QgsRasterAnalysisUtils::medianFromCellValues( std::vector<double> &cellValues, int stackSize )
{
std::sort( cellValues.begin(), cellValues.end() );
bool even = ( stackSize % 2 ) < 1;
@ -341,14 +341,14 @@ double QgsRasterAnalysisUtils::medianFromCellValues( std::vector<double> cellVal
}
double QgsRasterAnalysisUtils::stddevFromCellValues( std::vector<double> cellValues, int stackSize )
double QgsRasterAnalysisUtils::stddevFromCellValues( std::vector<double> &cellValues, int stackSize )
{
double variance = varianceFromCellValues( cellValues, stackSize );
double stddev = std::sqrt( variance );
return stddev;
}
double QgsRasterAnalysisUtils::varianceFromCellValues( std::vector<double> cellValues, int stackSize )
double QgsRasterAnalysisUtils::varianceFromCellValues( std::vector<double> &cellValues, int stackSize )
{
double mean = meanFromCellValues( cellValues, stackSize );
double accum = 0.0;
@ -360,17 +360,17 @@ double QgsRasterAnalysisUtils::varianceFromCellValues( std::vector<double> cellV
return variance;
}
double QgsRasterAnalysisUtils::maximumFromCellValues( std::vector<double> cellValues )
double QgsRasterAnalysisUtils::maximumFromCellValues( std::vector<double> &cellValues )
{
return *std::max_element( cellValues.begin(), cellValues.end() );
}
double QgsRasterAnalysisUtils::minimumFromCellValues( std::vector<double> cellValues )
double QgsRasterAnalysisUtils::minimumFromCellValues( std::vector<double> &cellValues )
{
return *std::min_element( cellValues.begin(), cellValues.end() );
}
double QgsRasterAnalysisUtils::majorityFromCellValues( std::vector<double> cellValues, const double noDataValue, int stackSize )
double QgsRasterAnalysisUtils::majorityFromCellValues( std::vector<double> &cellValues, const double noDataValue, int stackSize )
{
if ( stackSize == 1 )
{
@ -418,7 +418,7 @@ double QgsRasterAnalysisUtils::majorityFromCellValues( std::vector<double> cellV
}
}
double QgsRasterAnalysisUtils::minorityFromCellValues( std::vector<double> cellValues, const double noDataValue, int stackSize )
double QgsRasterAnalysisUtils::minorityFromCellValues( std::vector<double> &cellValues, const double noDataValue, int stackSize )
{
if ( stackSize == 1 )
{
@ -466,20 +466,20 @@ double QgsRasterAnalysisUtils::minorityFromCellValues( std::vector<double> cellV
}
}
double QgsRasterAnalysisUtils::rangeFromCellValues( std::vector<double> cellValues )
double QgsRasterAnalysisUtils::rangeFromCellValues( std::vector<double> &cellValues )
{
double max = *std::max_element( cellValues.begin(), cellValues.end() );
double min = *std::min_element( cellValues.begin(), cellValues.end() );
return max - min;
}
double QgsRasterAnalysisUtils::varietyFromCellValues( std::vector<double> cellValues )
double QgsRasterAnalysisUtils::varietyFromCellValues( std::vector<double> &cellValues )
{
std::unordered_set<double> uniqueValues( cellValues.begin(), cellValues.end() );
return uniqueValues.size();
}
double QgsRasterAnalysisUtils::nearestRankPercentile( std::vector<double> cellValues, int stackSize, double percentile )
double QgsRasterAnalysisUtils::nearestRankPercentile( std::vector<double> &cellValues, int stackSize, double percentile )
{
//if percentile equals 0 -> pick the first element of the ordered list
std::sort( cellValues.begin(), cellValues.end() );
@ -487,13 +487,13 @@ double QgsRasterAnalysisUtils::nearestRankPercentile( std::vector<double> cellVa
int i = 0;
if ( percentile > 0 )
{
i = static_cast<int>( std::ceil( percentile * static_cast<double>( stackSize ) ) - 1 );
i = std::ceil( percentile * static_cast<double>( stackSize ) ) - 1;
}
return cellValues[i];
}
double QgsRasterAnalysisUtils::interpolatedPercentileInc( std::vector<double> cellValues, int stackSize, double percentile )
double QgsRasterAnalysisUtils::interpolatedPercentileInc( std::vector<double> &cellValues, int stackSize, double percentile )
{
std::sort( cellValues.begin(), cellValues.end() );
double x = ( percentile * ( stackSize - 1 ) );
@ -515,7 +515,7 @@ double QgsRasterAnalysisUtils::interpolatedPercentileInc( std::vector<double> ce
}
}
double QgsRasterAnalysisUtils::interpolatedPercentileExc( std::vector<double> cellValues, int stackSize, double percentile, double noDataValue )
double QgsRasterAnalysisUtils::interpolatedPercentileExc( std::vector<double> &cellValues, int stackSize, double percentile, double noDataValue )
{
std::sort( cellValues.begin(), cellValues.end() );
double x = ( percentile * ( stackSize + 1 ) );
@ -535,7 +535,7 @@ double QgsRasterAnalysisUtils::interpolatedPercentileExc( std::vector<double> ce
}
}
double QgsRasterAnalysisUtils::interpolatedPercentRankInc( std::vector<double> cellValues, int stackSize, double value, double noDataValue )
double QgsRasterAnalysisUtils::interpolatedPercentRankInc( std::vector<double> &cellValues, int stackSize, double value, double noDataValue )
{
std::sort( cellValues.begin(), cellValues.end() );
@ -562,7 +562,7 @@ double QgsRasterAnalysisUtils::interpolatedPercentRankInc( std::vector<double> c
}
}
double QgsRasterAnalysisUtils::interpolatedPercentRankExc( std::vector<double> cellValues, int stackSize, double value, double noDataValue )
double QgsRasterAnalysisUtils::interpolatedPercentRankExc( std::vector<double> &cellValues, int stackSize, double value, double noDataValue )
{
std::sort( cellValues.begin(), cellValues.end() );

View File

@ -118,52 +118,52 @@ namespace QgsRasterAnalysisUtils
/**
* Returns the arithmetic mean from a vector of cell values
*/
double meanFromCellValues( std::vector<double> cellValues, int stackSize );
double meanFromCellValues( std::vector<double> &cellValues, int stackSize );
/**
* Returns the median from a vector of cell values
*/
double medianFromCellValues( std::vector<double> cellValues, int stackSize );
double medianFromCellValues( std::vector<double> &cellValues, int stackSize );
/**
* Returns the standard deviation from a vector of cell values
*/
double stddevFromCellValues( std::vector<double> cellValues, int stackSize );
double stddevFromCellValues( std::vector<double> &cellValues, int stackSize );
/**
* Returns the variance from a vector of cell values
*/
double varianceFromCellValues( std::vector<double> cellValues, int stackSize );
double varianceFromCellValues( std::vector<double> &cellValues, int stackSize );
/**
* Returns the maximum value from a vector of cell values
*/
double maximumFromCellValues( std::vector<double> cellValues );
double maximumFromCellValues( std::vector<double> &cellValues );
/**
* Returns the minimum value from a vector of cell values
*/
double minimumFromCellValues( std::vector<double> cellValues );
double minimumFromCellValues( std::vector<double> &cellValues );
/**
* Returns the majority value from a vector of cell values
*/
double majorityFromCellValues( std::vector<double> cellValues, const double noDataValue, int stackSize );
double majorityFromCellValues( std::vector<double> &cellValues, const double noDataValue, int stackSize );
/**
* Returns the minority value from a vector of cell values
*/
double minorityFromCellValues( std::vector<double> cellValues, const double noDataValue, int stackSize );
double minorityFromCellValues( std::vector<double> &cellValues, const double noDataValue, int stackSize );
/**
* Returns the range from a vector of cell values
*/
double rangeFromCellValues( std::vector<double> cellValues );
double rangeFromCellValues( std::vector<double> &cellValues );
/**
* Returns the variety from a vector of cell values
*/
double varietyFromCellValues( std::vector<double> cellValues );
double varietyFromCellValues( std::vector<double> &cellValues );
enum CellValuePercentileMethods
{
@ -176,21 +176,21 @@ namespace QgsRasterAnalysisUtils
* Returns the nearest rank percentile from a vector of cellValues,
* percentile parameter ranges between 0 and 1
*/
double nearestRankPercentile( std::vector<double> cellValues, int stackSize, double percentile );
double nearestRankPercentile( std::vector<double> &cellValues, int stackSize, double percentile );
/**
* Returns the linearly interpolated percentile inclusive from a vector of cellValues,
* percentile parameter ranges between 0 and 1 inclusive
* see LibreOffice Calc's or Microsoft Excel's PERCENTILE.INC() function
*/
double interpolatedPercentileInc( std::vector<double> cellValues, int stackSize, double percentile );
double interpolatedPercentileInc( std::vector<double> &cellValues, int stackSize, double percentile );
/**
* Returns the linearly interpolated percentile inclusive from a vector of cellValues,
* percentile parameter ranges between 0 and 1 exclusive
* see LibreOffice Calc's or Microsoft Excel's PERCENTILE.EXC() function
*/
double interpolatedPercentileExc( std::vector<double> cellValues, int stackSize, double percentile, double noDataValue );
double interpolatedPercentileExc( std::vector<double> &cellValues, int stackSize, double percentile, double noDataValue );
enum CellValuePercentRankMethods
{
@ -203,14 +203,14 @@ namespace QgsRasterAnalysisUtils
* values outside the cellValue distribution (greater or smaller) will return noData
* see LibreOffice Calc's or Microsoft Excel's PERCENTRANK.INC() function
*/
double interpolatedPercentRankInc( std::vector<double> cellValues, int stackSize, double value, double noDataValue );
double interpolatedPercentRankInc( std::vector<double> &cellValues, int stackSize, double value, double noDataValue );
/**
* Returns the linearly interpolated percentrank exclusive of a value from a vector of cellValues,
* values outside the cellValue distribution (greater or smaller) will return noData
* see LibreOffice Calc's or Microsoft Excel's PERCENTRANK.EXC() function
*/
double interpolatedPercentRankExc( std::vector<double> cellValues, int stackSize, double value, double noDataValue );
double interpolatedPercentRankExc( std::vector<double> &cellValues, int stackSize, double value, double noDataValue );
}