【发布时间】:2017-09-01 16:52:57
【问题描述】:
我有一个声音信号,作为一个 numpy 数组导入,我想将它切割成多个 numpy 数组。但是,我希望这些块只包含高于阈值的元素。例如:
threshold = 3
signal = [1,2,6,7,8,1,1,2,5,6,7]
应该输出两个数组
vec1 = [6,7,8]
vec2 = [5,6,7]
好的,以上是列表,但你明白我的意思。
到目前为止,这是我尝试过的,但这只会杀死我的 RAM
def slice_raw_audio(audio_signal, threshold=5000):
signal_slice, chunks = [], []
for idx in range(0, audio_signal.shape[0], 1000):
while audio_signal[idx] > threshold:
signal_slice.append(audio_signal[idx])
chunks.append(signal_slice)
return chunks
【问题讨论】:
-
如何定义块的大小?
-
从第一个大于阈值的元素到最后一个。下一个块相同...
-
您可以产生每个切片而不是返回所有内容,因此在迭代时并非所有内容都在内存中,如果这是您唯一的问题。此外,您应该将信号数组转换为常规列表以进行迭代,numpy 只会减慢您的速度。