我有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
您可以保留先前步骤中用于相关性计算的聚合值(sum(x),sum(x ^ 2),sum(y),sum(y ^ 2),sum(x * y)),并仅更新这些值每一步: