【发布时间】:2021-12-08 01:54:30
【问题描述】:
我有这样一个样本:[5,3,5,5,8,9,8,8,6,1]
我想找到模式。在本例中为 5 和 8。
我已经实现了这样一个方法:
static List<int> Mode(int[] array)
{
if (array.Length == 0)
{
throw new ArgumentException("Sample can't be empty");
}
List<int> result = new List<int>();
var counts = new Dictionary<int, int>();
int max = 0;
foreach (int num in array)
{
if (counts.ContainsKey(num))
counts[num] = counts[num] + 1;
else
counts[num] = 1;
}
foreach (var key in counts.Keys)
{
if (counts[key] > max)
{
max = counts[key];
result.Add(max);
}
}
return result;
}
但输出是 1,3
怎么了?
【问题讨论】:
-
模式是什么意思?
-
一个问题是您将计数而不是数字添加到列表中。但即使你修复了这个问题,你最终也会从字典中添加第一个键,因为它的计数高于 1。你需要先确定最大值,然后找到计数等于该值的所有数字。
-
@Hazrelle Mode 是数据集中出现频率最高的一个或多个数字。
标签: c# statistics sample mode