我正在尝试计算鼠标移动的熵。我不是c#程序员,但我正尝试将c ++代码移植到其中,因此我可能已经超出了实际数学的理解范围(我不理解,因此我使用了在线资源)
我为每个位置(x和y)创建一个排序的字典:
SortedDictionary<int, int> freqx = new SortedDictionary<int, int>();
SortedDictionary<int, int> freqy = new SortedDictionary<int, int>();
在我应该移动鼠标的while循环中,我使用它来捕获和存储值。将该键设置为每个鼠标位置(x或y),并且该值应为出现某些x或y值的次数:
if(freqx .ContainsKey(curr_x))
{
freqx[curr_x] += 1;
}
else
{
freqx.Add(curr_x, 1);
}
if (freqy.ContainsKey(curr_y))
{
freqy[curr_y] += 1;
}
else
{
freqy.Add(curr_y, 1);
}
然后在循环结束时,我尝试像这样计算每个熵:
double entropyx = 0.0;
foreach(KeyValuePair<int, int> entry in freqx)
{
double currfreq = Convert.ToDouble(entry.value) / 1;
entropyx += currfreq * Log2(currfreq);
}
entropyx *= 1;
double entropyy = 0.0;
foreach (KeyValuePair<int, int> entry in freqy)
{
double currfreq = Convert.ToDouble(entry.Value) / 1;
entropyy += currfreq * Log2(currfreq);
}
entropyy *= 1;
我最后从x得到的值是2,从y得到的值超过700
我怀疑我使用的算法不好(或者我错了)
那我的代码怎么了?
顺便说一句,log2是:
double Log2(double Nr)
{
return Math.Log(Nr) / Math.Log(2);
}