From 192817edc3483fb8d7537bcc1ae79f53031d9901 Mon Sep 17 00:00:00 2001 From: Daniel Waggoner <dwaggoner@frbatlanta.org> Date: Fri, 1 Jul 2011 09:45:14 -0400 Subject: [PATCH] MatrixPercentiles() and VectorPercentiles() now return values. Should not break any existing code. (cherry picked from commit e47cee2be5e7785f86d75ad3d72af8db87794088) --- histogram/dw_histogram.c | 18 ++++++++++++++---- include/dw_histogram.h | 4 ++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/histogram/dw_histogram.c b/histogram/dw_histogram.c index d38c54f..cf87016 100644 --- a/histogram/dw_histogram.c +++ b/histogram/dw_histogram.c @@ -141,15 +141,20 @@ void AddMatrixObservation(TMatrix X, TMatrixHistogram *h) h->sample_size++; } -void MatrixPercentile(TMatrix X, PRECISION percentile, TMatrixHistogram *h) +TMatrix MatrixPercentile(TMatrix X, PRECISION percentile, TMatrixHistogram *h) { int i, j; - if ((h->rows != RowM(X)) || (h->cols != ColM(X))) dw_Error(SIZE_ERR); + if (!X) + { if (!(X=CreateMatrix(h->rows,h->cols))) return (TMatrix)NULL; } + else + if ((h->rows != RowM(X)) || (h->cols != ColM(X))) { dw_Error(SIZE_ERR); return (TMatrix)NULL; } for (i=h->rows-1; i >= 0; i--) for (j=h->cols-1; j >= 0; j--) ElementM(X,i,j)=Percentile(percentile,h->low[i][j],h->freq[i][j],ElementM(h->Min,i,j),ElementM(h->Max,i,j),h->intervals,h->sample_size); + + return X; } /* @@ -278,14 +283,19 @@ void AddVectorObservation(TVector x, TVectorHistogram *h) h->sample_size++; } -void VectorPercentile(TVector x, PRECISION percentile, TVectorHistogram *h) +TVector VectorPercentile(TVector x, PRECISION percentile, TVectorHistogram *h) { int i; - if (h->dim != DimV(x)) dw_Error(SIZE_ERR); + if (!x) + { if (!(x=CreateVector(h->dim))) return (TVector)NULL; } + else + if (h->dim != DimV(x)) { dw_Error(SIZE_ERR); return (TVector)NULL; } for (i=h->dim-1; i >= 0; i--) ElementV(x,i)=Percentile(percentile,h->low[i],h->freq[i],ElementV(h->Min,i),ElementV(h->Max,i),h->intervals,h->sample_size); + + return x; } diff --git a/include/dw_histogram.h b/include/dw_histogram.h index 2fe0b71..4b75d90 100644 --- a/include/dw_histogram.h +++ b/include/dw_histogram.h @@ -69,7 +69,7 @@ TMatrixHistogram *CreateMatrixHistogram(int rows, int cols, int intervals, int t void SetMaxMinMatrixHistogram(TMatrix Min, TMatrix Max, TMatrixHistogram *h); void FreeMatrixHistogram(TMatrixHistogram *h); void AddMatrixObservation(TMatrix X, TMatrixHistogram *h); -void MatrixPercentile(TMatrix X, PRECISION percentile, TMatrixHistogram *h); +TMatrix MatrixPercentile(TMatrix X, PRECISION percentile, TMatrixHistogram *h); void MatrixCumulative(TMatrix P, TMatrix Level, TMatrixHistogram *h); TMatrix PlotMatrixHistogramAuto(int i, int j, int bins, TMatrixHistogram *h); TMatrix PlotMatrixHistogram(int i, int j, PRECISION min, PRECISION max, int bins, TMatrixHistogram *h); @@ -78,7 +78,7 @@ TVectorHistogram *CreateVectorHistogram(int dim, int intervals, int type); void SetMaxMinVectorHistogram(TVector Min, TVector Max, TVectorHistogram *h); void FreeVectorHistogram(TVectorHistogram *h); void AddVectorObservation(TVector X, TVectorHistogram *h); -void VectorPercentile(TVector X, PRECISION percentile, TVectorHistogram *h); +TVector VectorPercentile(TVector X, PRECISION percentile, TVectorHistogram *h); void VectorCumulative(TVector p, TVector level, TVectorHistogram *h); TMatrix PlotVectorHistogramAuto(int i, int bins, TVectorHistogram *h); TMatrix PlotVectorHistogram(int i, PRECISION min, PRECISION max, int bins, TVectorHistogram *h); -- GitLab