【发布时间】:2015-10-08 14:39:28
【问题描述】:
我有两个音乐文件:一个是无损的,声音间隙很小(此时它只是静音,但可以是任何东西:正弦曲线或只是一些噪音)和一个 mp3:
In [1]: plt.plot(y[:100000])
Out[1]:
In [2]: plt.plot(y2[:100000])
Out[2]:
这个列表相似但不完全相同,所以我需要缩小这个差距,以找到一个列表在另一个列表中的第一次出现,并且具有最低的 delta 错误。
这是我的解决方案(5.7065 秒):
error = []
for i in range(25000):
y_n = y[i:100000]
y2_n = y2[:100000-i]
error.append(abs(y_n - y2_n).mean())
start = np.array(error).argmin()
print(start, error[start]) #23057 0.0100046
有什么pythonic方法可以解决这个问题吗?
编辑: 在计算特殊点之间的平均距离后(例如数据 == 0.5),我将搜索区域从 25000 减少到 2000。这给了我 0.3871 秒的合理时间:
a = np.where(y[:100000].round(1) == 0.5)[0]
b = np.where(y2[:100000].round(1) == 0.5)[0]
mean = int((a - b[:len(a)]).mean())
delta = 1000
error = []
for i in range(mean - delta, mean + delta):
...
【问题讨论】:
-
如果我们不比较整个数组而只比较其中最独特的部分会怎样?