gpt4 book ai didi

python - 用较短的数组替换部分 numpy 1D 数组

转载 作者:太空宇宙 更新时间:2023-11-04 09:19:33 25 4
gpt4 key购买 nike

我有一个包含一些音频数据的一维 numpy 数组。我正在做一些处理,想用白噪声替换数据的某些部分。但是,噪音应该比被更换的部件短。产生噪音不是问题,但我想知道用噪音替换原始数据的最简单方法是什么。我的第一个想法是 data[10:110] = noise[0:10] 由于明显的维度不匹配而无法工作。

用不同维度的另一部分替换 numpy 数组的一部分的最简单方法是什么?

编辑:数据是未压缩的 PCM 数据,最长可达一个小时,占用几百 MB 的内存。我想避免在内存中创建任何额外的副本。

最佳答案

在您的应用程序中,numpy 数组比 python 列表有什么优势?我认为 numpy 数组的弱点之一是它们不容易调整大小:

http://mail.python.org/pipermail/python-list/2008-June/1181494.html

您真的需要从正在缩短的数组段中回收内存吗?如果没有,也许您可​​以使用屏蔽数组:

http://docs.scipy.org/doc/numpy/reference/maskedarray.generic.html

当您想用较短的噪声部分替换信号的一部分时,请替换信号的第一 block ,然后屏蔽掉已移除信号的其余部分。

编辑:这里有一些笨拙的 numpy 代码,不使用掩码数组,也不分配更多内存。它也不会为已删除的段释放任何内存。这个想法是通过移动数组的剩余部分来替换您想要删除的数据,在数组的末尾留下零(或垃圾)。

import numpy
a = numpy.arange(10)
# [0 1 2 3 4 5 6 7 8 9]
## Replace a[2:7] with length-2 noise:
insert = -1 * numpy.ones((2))
new = slice(2, 4)
old = slice(2, 7)
#Just to indicate what we'll be replacing:
a[old] = 0
# [0 1 0 0 0 0 0 7 8 9]
a[new] = insert
# [0 1 -1 -1 0 0 0 7 8 9]
#Shift the remaining data over:
a[new.stop:(new.stop - old.stop)] = a[old.stop:]
# [0 1 -1 -1 7 8 9 7 8 9]
#Zero out the dangly bit at the end:
a[(new.stop - old.stop):] = 0
# [0 1 -1 -1 7 8 9 0 0 0]

关于python - 用较短的数组替换部分 numpy 1D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4490987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com