为了计算直方图,我需要生成 bin。语言是 C#。基本上我需要接受一个十进制数数组并从中生成一个直方图。
一直无法找到一个像样的库来直接完成这项工作,所以现在我只是在寻找一个库或一种算法来帮助我对数据进行装箱。
所以...
- 是否有任何 C# 库可以接收十进制数据数组并输出分箱直方图?
- 是否有通用算法来构建用于生成直方图的 bin?
最佳答案
这是我使用的一个简单的桶函数。遗憾的是,.NET 泛型不支持数字类型约束,因此您必须为 decimal、int、double 等实现以下函数的不同版本。
public static List<int> Bucketize(this IEnumerable<decimal> source, int totalBuckets)
{
var min = source.Min();
var max = source.Max();
var buckets = new List<int>();
var bucketSize = (max - min) / totalBuckets;
foreach (var value in source)
{
int bucketIndex = 0;
if (bucketSize > 0.0)
{
bucketIndex = (int)((value - min) / bucketSize);
if (bucketIndex == totalBuckets)
{
bucketIndex--;
}
}
buckets[bucketIndex]++;
}
return buckets;
}
关于c# - 寻找十进制数据的直方图分箱算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387916/