【发布时间】:2013-01-18 07:49:37
【问题描述】:
我目前正在使用 python 和 numpy/scipy 实现节拍检测算法。 我基本上需要读取一个 .wav 文件并对其进行处理。代码如下:
sampling_rate, wave_data = scipy.io.wavfile.read(argv[1])
wave_data 是一个一维 numpy 数组,包含大约 441 000 个元素(10 秒的声音,采样率为 44.1 kHz)。现在,我需要对这个数组中的每两个元素做一些基本的数学运算。这就是我现在的做法:
wave_data = [sampling_rate * (wave_data[i+1] - wave_data[i])
for i in xrange(len(wave_data)-1)]
此操作需要太多时间(无需分析即可发现)。我需要成对地“就地”映射数组,而不创建新的 python 列表。我知道有numpy.vectorize,但我不知道如何进行成对映射(映射数组的每两个元素)。
【问题讨论】:
标签: python arrays numpy mapping scipy