我有numpy 2D数组定义的嘈杂曲线:
如您所见,它具有第一个平坦段,然后是上升,峰值和衰减阶段。我需要找到上升阶段的起点,这里用红点标记。我怎么在python中做到这一点?
答案 0 :(得分:6)
如果数据看起来与示例图中的数据类似,则可以估计背景及其噪声级别,并应用一些阈值来提取高于背景的数据部分。例子如下:
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
from scipy.ndimage import gaussian_filter
def generate_fake_data():
"""Generate data that looks like an example given."""
xs = np.arange(0, 25, 0.05)
ys = - 20 * 1./(1 + np.exp(-(xs - 5.)/0.3))
m = xs > 7.
ys[m] = -20.*np.exp(-(xs - 7.)[m] / 5.)
# add noise
ys += np.random.normal(0, 0.2, xs.size)
return xs, ys
def main():
xs, ys = generate_fake_data()
# smooth out noise
smoothed = gaussian_filter(ys, 3.)
# find the point where the signal goes above the background noise
# level (assumed to be zero here).
base = 0.
std = (ys[xs < 3] - base).std()
m = smoothed < (base - 3. * std)
x0 = xs[m][0]
y0 = ys[m][0]
plt.plot(xs, ys, '.')
plt.plot(xs, smoothed, '-')
plt.plot(x0, y0, 'o')
plt.show()
if __name__ == '__main__':
main()
答案 1 :(得分:5)
好吧,我计算了小dt沿曲线的局部微分,导数曲线的极值指出了&#34;拐点&#34;很好。我想,我会解决这个问题。