假设我有一份双打名单:
0.0015
0.0016
0.0017
0.0019
0.0021
0.0022
0.0029
0.0030
0.0033
0.0036
与其余部分相比,0.0022和0.0029显然存在很大差异,但有没有办法让我的C#程序能够使用静态阈值在排序列表W / O中注意到这种差异。因为我收到的这些数据,差异可能并不总是0.0007的差异。所以我更希望我的程序能够“智能”足以识别这些“大”差异并将此列表分成多个列表。
答案 0 :(得分:3)
如果我已正确理解你的问题,请点击此处。你可能需要填补一些空白,但你会得到以下例子的漂移:
List<double> doubleList = new List<double>{
0.0015,
0.0016,
0.0017,
0.0019,
0.0021,
0.0022,
0.0029,
0.0030,
0.0033,
0.0036
};
double averageDistance = 0.0;
double totals = 0.0;
double distance = 0.0;
for (int x = 0; x < (doubleList.Count - 1); x++)
{
distance = doubleList[x] - doubleList[x + 1];
totals += Math.Abs(distance);
}
averageDistance = totals / doubleList.Count;
// check to see if any distance between numbers is more than the average in the list
for (int x = 0; x < (doubleList.Count - 1); x++)
{
distance = doubleList[x] - doubleList[x + 1];
if (distance > averageDistance)
{
// this is where you have a gap that you want to do some split (etc)
}
}
答案 1 :(得分:1)
计算平均值(http://en.wikipedia.org/wiki/Arithmetic_mean)和标准差(http://en.wikipedia.org/wiki/Standard_deviation)。使用这些来确定超出'n'标准差的值。
另一种方法是计算连续值之间的所有差异,对它们进行排序(降序)并假设这些差值的顶部'm'%代表最大的变化。