Python 带阵列的Numpy掩蔽
我不确定问这个问题的最佳方式,所以我提前道歉 我试图在NxM numpy音频信号阵列的每一行上找到一个峰值。数组中的每一行都是单独处理的,我想在频率空间中得到数组中每N行的所有值,这些值在噪声层以上一定数量的标准偏差。在这个实验中,我知道我没有超过400Hz的信号,所以我用它作为我的噪声地板。我在试图掩饰时遇到了问题。以下是我的代码片段:Python 带阵列的Numpy掩蔽,python,arrays,numpy,Python,Arrays,Numpy,我不确定问这个问题的最佳方式,所以我提前道歉 我试图在NxM numpy音频信号阵列的每一行上找到一个峰值。数组中的每一行都是单独处理的,我想在频率空间中得到数组中每N行的所有值,这些值在噪声层以上一定数量的标准偏差。在这个实验中,我知道我没有超过400Hz的信号,所以我用它作为我的噪声地板。我在试图掩饰时遇到了问题。以下是我的代码片段: from scipy import signal import numpy as np Pxx_den = signal.periodogram(inpu
from scipy import signal
import numpy as np
Pxx_den = signal.periodogram(input, fs=sampleRate ,nfft=sampleRate,axis=1)
p = np.array(Pxx_den)[1].astype(np.float)
noiseFloor = np.mean(p[:,400:],axis=1)
stdFloor = np.std(p[:,400:],axis=1)
p = np.ma.masked_less(p,noiseFloor+stdFloor*2)
此示例将生成以下错误:
ValueError: operands could not be broadcast together with shapes (91,5001) (91,)
我推断这是因为ma.masked_less使用单个值,不接受数组。我希望输出是一个大于条件值的NxM数组。有没有一个简单的方法来做我想做的事情,或者有一个有效的替代方法
我还研究了一些峰值检测例程,如peakUtils和scipy.signal.find_peaks_cwt(),但它们似乎只作用于一维数组
在深入使用掩码数组之前,请提前感谢,请确保以下代码能够处理它们。它必须知道掩码数组是如何工作的,或者遵从掩码数组方法 至于具体的问题,我认为这是一个新的问题:
In [612]: x=np.arange(10).reshape(2,5)
In [613]: np.ma.masked_less(x,np.array([3,6]))
...
ValueError: operands could not be broadcast together with shapes (2,5) (2,)
我有一个2d数组,我尝试应用
In [627]: mask= x<np.array([3,6])[:,None]
In [628]: np.ma.masked_where(mask,x)
Out[628]:
masked_array(data =
[[-- -- -- 3 4]
[-- 6 7 8 9]],
mask =
[[ True True True False False]
[ True False False False False]],
fill_value = 999999)
In [631]: x[~mask]
Out[631]: array([3, 4, 6, 7, 8, 9])
In [632]: np.ma.masked_where(mask,x).compressed()
Out[632]: array([3, 4, 6, 7, 8, 9])