public static MatrixValue Histogram(MatrixValue v, Double[] centers)
{
if (centers.Length == 0)
throw new YAMPWrongLengthException(0, 1);
var H = new MatrixValue(centers.Length, 1);
var N = new int[centers.Length];
var last = centers.Length - 1;
for (var i = 1; i <= v.Length; i++)
{
var y = v[i].Re;
if (y < centers[0])
{
N[0]++;
}
else if (y > centers[last])
{
N[last]++;
}
else
{
var min = Double.MaxValue;
var index = 0;
for (var j = 0; j < centers.Length; j++)
{
var dist = Math.Abs(y - centers[j]);
if (dist < min)
{
index = j;
min = dist;
}
}
N[index]++;
}
}
for (var i = 1; i <= centers.Length; i++)
{
H[i, 1] = new ScalarValue(N[i - 1]);
}
return H;
}