Prędkość Cythona i numpy

Używam cython do obliczenia korelacji w moim programie Pythona. Mam dwa zestawy danych audio i muszę znać różnicę czasu między nimi. Drugi zestaw jest cięty na podstawie czasów początkowych, a następnie przesuwany po pierwszym zestawie. Istnieją dwie pętle for: jedna przesuwa zestaw, a pętla wewnętrzna oblicza korelację w tym punkcie. Ta metoda działa bardzo dobrze i jest wystarczająco dokładna.

Problem polega na tym, że przy czystym pytonie trwa to dłużej niż minutę. Z moim kodem cythona zajmuje to około 17 sekund. To wciąż za dużo. Czy masz jakieś wskazówki, jak przyspieszyć ten kod:

import numpy as np
cimport numpy as np

cimport cython

FTYPE = np.float
ctypedef np.float_t FTYPE_t

@cython.boundscheck(False)
def delay(np.ndarray[FTYPE_t, ndim=1] f, np.ndarray[FTYPE_t, ndim=1] g):
    cdef int size1 = f.shape[0]
    cdef int size2 = g.shape[0]
    cdef int max_correlation = 0
    cdef int delay = 0
    cdef int current_correlation, i, j

    # Move second data set frame by frame
    for i in range(0, size1 - size2):
        current_correlation = 0

        # Calculate correlation at that point
        for j in range(size2):
            current_correlation += f[<unsigned int>(i+j)] * g[j]

        # Check if current correlation is highest so far
        if current_correlation > max_correlation:
            max_correlation = current_correlation
            delay = i

    return delay

questionAnswers(3)

yourAnswerToTheQuestion