Python プログラムで相関計算に cython を使用しています。2 つのオーディオ データ セットがあり、それらの時間差を知る必要があります。2 番目のセットは、開始時間に基づいてカットされ、最初のセットを横切ってスライドされます。2 つの for ループがあります。1 つはセットをスライドさせ、内側のループはその時点で相関を計算します。この方法は非常にうまく機能し、十分に正確です。
問題は、純粋な python では、これに 1 分以上かかることです。私の cython コードでは、約 17 秒かかります。これはまだ多すぎる。このコードを高速化するためのヒントはありますか:
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