首页 > 解决方案 > 如何添加两个部分重叠的 numpy 数组并扩展非重叠部分?

问题描述

我正在将一个短音频信号(音符的一维 numpy 数组)添加到一个较长信号的大致末尾(到目前为止构建的音频流的第一部分)。我想添加重叠部分并扩展非重叠部分。实现这一目标的最有效方法是什么?我可以识别重叠部分并将其添加到主信号中,同时连接非重叠部分,但我认为这不够有效。我还认为通过用零填充使它们具有相同的大小是非常低效的内存。是否有实现此目的的 numpy 或 scipy 函数?

在此处输入图像描述

标签: numpysignal-processingnumpy-ndarray

解决方案


np 数组是连续的内存块。那些ab几乎可以保证彼此连续,因此您实际上只能选择使用第二个的副本扩展一个或创建一个新对象来创建您想要的对象。

我不知道你的限制,但我怀疑你正试图过早地优化。只需先写一些清楚的东西,如果它不能满足您的任何需求,请进行优化:

def add_signal(a, b, ai=0, bi=0):
    assert ai >= 0
    assert bi >= 0

    al = len(a)
    bl = len(b)
    cl = max(ai + al, bi + bl)
    c = np.zeros(cl)
    c[ai: ai + al] += a
    c[bi: bi + bl] += b
    return c

例子:

a = np.array([0, 1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40])
add_signal(a, b, bi=len(a)-3)

输出:

array([ 0.,  1.,  2., 13., 24., 35., 40.])

推荐阅读