【问题标题】:How to remove noise-only rows from a numpy array?如何从 numpy 数组中删除仅噪声行?
【发布时间】:2022-01-06 18:56:27
【问题描述】:

我想从 Numpy 数组中删除行,其中只有噪声和随机常数偏移。

我的数据与此类似:

offset = np.array([0.2, 3.2])
signal = np.sin(np.arange(0, 2 * np.pi, 0.1))
null = np.zeros_like(signal)
data_block = np.array([signal, null]).T
padding = np.zeros((10, 2))
block = np.vstack((padding, data_block, padding)) + offset
# add noise
shape = block.shape
noise = np.random.rand(shape[0], shape[1]) * .01
everything = noise + block

实际上,没有步骤,而是从偏移量到数据的平滑过渡。就像首先有偏移量,一旦数据块开始移动,它就开始移动,当它停止时变成另一个偏移量。噪声幅度远小于数据幅度。

我想从everything 中检索带有数据块的行,最好基于数据块中连续、平滑的变化。我该怎么做?

【问题讨论】:

    标签: numpy signal-processing noise


    【解决方案1】:

    这是我识别data_block 的最大努力。如果可以改进我会很高兴!

    import numpy as np
    
    offset = np.array([0.2, 3.2])
    signal = np.sin(np.arange(0, 2 * np.pi, 0.1))
    null = np.zeros_like(signal)
    data_block = np.array([signal, null]).T
    padding = np.zeros((10, 2))
    block = np.vstack((padding, data_block, padding)) + offset
    # add noise
    shape = block.shape
    noise = np.random.rand(shape[0], shape[1]) * .01
    everything = noise + block
    
    from matplotlib import pyplot as plt
    
    x = np.arange(shape[0])
    plt.plot(x, everything[:, 0])
    plt.plot(x, everything[:, 1])
    plt.show()
    
    diff_everything = np.diff(everything, axis=0)
    x = np.arange(shape[0] - 1)
    plt.plot(x, diff_everything[:, 0])
    plt.plot(x, diff_everything[:, 1])
    plt.show()
    
    mask = (np.linalg.norm(diff_everything[:, :], axis=1) > 0.01)
    mask = np.append(mask, False)
    data = everything[mask, :]
    shape = data.shape
    x=np.arange(0,shape[0])
    plt.plot(x, data[:, 0])
    plt.plot(x, data[:, 1])
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 2013-08-29
      • 1970-01-01
      • 2022-10-04
      • 2023-03-11
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      相关资源
      最近更新 更多