Python 带阵列的Numpy掩蔽

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

我不确定问这个问题的最佳方式,所以我提前道歉

我试图在NxM numpy音频信号阵列的每一行上找到一个峰值。数组中的每一行都是单独处理的,我想在频率空间中得到数组中每N行的所有值,这些值在噪声层以上一定数量的标准偏差。在这个实验中,我知道我没有超过400Hz的信号,所以我用它作为我的噪声地板。我在试图掩饰时遇到了问题。以下是我的代码片段:

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])