73 lines
1011 B
C#
73 lines
1011 B
C#
using System;
|
|
|
|
namespace AForge.Math;
|
|
|
|
[Serializable]
|
|
public class Histogram
|
|
{
|
|
private int[] values;
|
|
|
|
private double mean;
|
|
|
|
private double stdDev;
|
|
|
|
private int median;
|
|
|
|
private int min;
|
|
|
|
private int max;
|
|
|
|
private long total;
|
|
|
|
public int[] Values => values;
|
|
|
|
public double Mean => mean;
|
|
|
|
public double StdDev => stdDev;
|
|
|
|
public int Median => median;
|
|
|
|
public int Min => min;
|
|
|
|
public int Max => max;
|
|
|
|
public long TotalCount => total;
|
|
|
|
public Histogram(int[] values)
|
|
{
|
|
this.values = values;
|
|
Update();
|
|
}
|
|
|
|
public IntRange GetRange(double percent)
|
|
{
|
|
return Statistics.GetRange(values, percent);
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
int num = values.Length;
|
|
max = 0;
|
|
min = num;
|
|
total = 0L;
|
|
for (int i = 0; i < num; i++)
|
|
{
|
|
if (values[i] != 0)
|
|
{
|
|
if (i > max)
|
|
{
|
|
max = i;
|
|
}
|
|
if (i < min)
|
|
{
|
|
min = i;
|
|
}
|
|
total += values[i];
|
|
}
|
|
}
|
|
mean = Statistics.Mean(values);
|
|
stdDev = Statistics.StdDev(values, mean);
|
|
median = Statistics.Median(values);
|
|
}
|
|
}
|