谁可以从Queue 很快获得Pearson相关性,

问题描述 投票:0回答:1

我有2个队列,如下所示:

Queue<double> RtnQueue = new Queue<double>();
Queue<double> RtnQueueTmin1 = new Queue<double>();

每个队列约有30K元素。

队列在不断变化,我需要对每次变化计算皮尔逊相关性:

Value = MathNet.Numerics.Statistics.Correlation.Pearson(RtnQueue, RtnQueueTmin1);

这里是方法:

public void Update(double datum, DateTime utcDT)
{
    if (RtnQueue != null && RtnQueue.Count >= Length)
    {
        RtnQueueTmin1.Dequeue();
        RtnQueueTmin1.Enqueue(RtnQueue.Last());

        RtnQueue.Dequeue();
        RtnQueue.Enqueue(datum);

        Value = MathNet.Numerics.Statistics.Correlation.Pearson(RtnQueue, RtnQueueTmin1);
    }
    else
    {
        if (RtnQueue.Count == 0)
            RtnQueueTmin1.Enqueue(0);
        else
            RtnQueueTmin1.Enqueue(RtnQueue.Last());

        RtnQueue.Enqueue(datum);
        Value = 0;
    }
}

这对于成千上万的更改来说很慢。如何提高效率?

我有2个队列,如下所示:Queue RtnQueue = new Queue ();队列RtnQueueTmin1 =新队列();每个队列有大约30K元素。队列...

c# performance
1个回答
0
投票

您可以保留先前步骤中用于相关性计算的聚合值(sum(x),sum(x ^ 2),sum(y),sum(y ^ 2),sum(x * y)),并仅更新这些值每一步:

© www.soinside.com 2019 - 2024. All rights reserved.