How to calculate simple moving average faster in C#?

后端 未结 14 2563
囚心锁ツ
囚心锁ツ 2020-12-15 06:42

What is the fastest library/algorithm for calculating simple moving average? I wrote my own, but it takes too long on 330 000 items decimal dataset.

  • period /
14条回答
  •  攒了一身酷
    2020-12-15 06:50

    // simple moving average
    int moving_average(double *values, double *&averages, int size, int periods)
    {
        double sum = 0;
        for (int i = 0; i < size; i ++)
            if (i < periods) {
                sum += values[i];
                averages[i] = (i == periods - 1) ? sum / (double)periods : 0;
            } else {
                sum = sum - values[i - periods] + values[i];
                averages[i] = sum / (double)periods;
            }
        return (size - periods + 1 > 0) ? size - periods + 1 : 0;
    }
    

    One C function, 13 lines of codes, simple moving average. Example of usage:

    double *values = new double[10]; // the input
    double *averages = new double[10]; // the output
    values[0] = 55;
    values[1] = 113;
    values[2] = 92.6;
    ...
    values[9] = 23;
    moving_average(values, averages, 10, 5); // 5-day moving average
    

提交回复
热议问题