gpt4 book ai didi

Python从数组中删除 'stationary'数据

转载 作者:行者123 更新时间:2023-12-01 04:52:14 25 4
gpt4 key购买 nike

如果我收集一些实验数据并将其加载到 Python 中,删除“固定”数据的最有效方法是什么?以下是我所拥有的图形示例。我想删除 z 数组中梯度几乎为 0 的元素(即大约前 60 个元素)。

然后我将留下一条嘈杂的正弦曲线以供稍后分析。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,5,60)

z = np.zeros(120)
z[0:60] = 1e-2*x + 10
z[60:120] = np.sin(x) + 0.1*np.random.randn(len(x)) + 10

# plt.figure()
# plt.plot(z)
# plt.show()

编辑:尝试了paradiso的解决方案:z = z[ np.gradient(z) > 1E-1 ]

设置 > 1e-2> 1e-5 等的类似结果

原始数据:

before

实现解决方案后:

after

最佳答案

一种选择是使用 numpy 显式计算梯度(它只使用中心差分方案),然后使用 numpy 的 bool 索引功能(也称为索引数组)来过滤掉导数较小的索引:

import numpy as np

z = np.zeros(120)
z[0:60] = 1e-2*x + 10
z[60:120] = np.sin(x) + 0.1*np.random.randn(len(x)) + 10

z = z[ np.gradient(z) > 1E-1 ]

编辑:

我对上面演示的失败有点困惑 - 我无法重现它。但是,您可以通过添加仅过滤掉平均值附近的数据的约束来使过滤器更加稳健:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,5,60)

z = np.zeros(120)
z[0:60] = 1e-2*x + 10
z[60:120] = np.sin(x) + 0.1*np.random.randn(len(x)) + 10

# Take some markers of the data - first and second derivatives should be plenty to filter out flat signals
z0 = np.mean(z)
dz = np.gradient(z)
ddz = np.gradient(dz)

plt.figure(figsize=(6, 2))
plt.subplot(1, 3, 1)

# Plot the original signal
plt.plot(z)
plt.xticks([ 30*i for i in range(5) ])

thresh = 1E-3
# First try filtering on the 1st derivative
bool_result = np.abs(dz) > thresh

plt.subplot(1, 3, 2)
plt.plot(z0+bool_result)
plt.plot(z[bool_result])
plt.yticks([]); plt.xticks([ 30*i for i in range(5) ])

# Now try filtering on both the first and proximity to the mean
bool_result = np.logical_not(np.logical_and(np.abs(dz) < thresh, np.abs(z-np.mean(z)) < .2))

plt.subplot(1, 3, 3)
plt.plot(z0+bool_result)
plt.plot(z[bool_result])
plt.yticks([]); plt.xticks([ 30*i for i in range(5) ])
plt.savefig("FilterResults.png")

以下是滤镜结果(蓝色曲线显示后两张图中的滤镜): Filter results

关于Python从数组中删除 'stationary'数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28182879/

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