Quantcast
Channel: Math.NET Numerics - Math.NET
Viewing all articles
Browse latest Browse all 224

How to accelerate the correlation caculation

$
0
0

@newonejoe wrote:

Hi,

I am new to Math.Net. It’s really a fantastic tool.
Could you give me any suggestions about this situation? This takes around 20 second to get the result.
signal size: 20000
pattern size: 10000
I am trying to find the max correlation and its shift for the pattern in the signal. The approach is as following:

    private KeyValuePair<int, double> findMaxCorrelation(List<double> pattern, List<double> signal)
    {
        int MaxShift = 0;
        double MaxCorrelation = .0;

        int patternLength = pattern.Count;

        int signalLength = signal.Count;

        int compensatedSignalLength = signalLength + 2 * patternLength;

        // signal                   111111
        // patern                   0000
        // compensatedsignal        00001111110000

        // add size of the signal to ensure the signal can cover the whole range of the pattern
        List<double> compensatedSignal = new List<double>(signal);
        compensatedSignal.InsertRange(0, Enumerable.Repeat(0.0, patternLength));
        compensatedSignal.AddRange(Enumerable.Repeat(0.0, patternLength));

        //
        for (int i = 0; i < signalLength + patternLength + 1; i++)
        {
            double correlation = MathNet.Numerics.Statistics.Correlation.Pearson(pattern, compensatedSignal.Where((v, idx) => (idx >= i && idx < i + patternLength)));
            if (correlation > MaxCorrelation)
            {
                MaxCorrelation = correlation;
                MaxShift = i - patternLength;
            } 
        }

        return new KeyValuePair<int, double>(MaxShift, MaxCorrelation);
    }

Posts: 1

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 224

Trending Articles