鼠标运动的熵

我正在尝试计算鼠标移动的熵。我不是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);
    }
评论