怎么求出是数据密集区。怎么实现类似图中所示;怎么求出是数据密集区。怎么实现类似图中所示
感觉这不是一个数据密度分布问题,而是一个方差问题,即:找出方差较小的一段区间。我的思路是先利用滑动均值滤波,得到相对平滑的曲线,再找出相邻点连续升或降的间隔区间,剩余的就是数据平滑区。下面的代码先构造了一个分段直线,再叠加随机信号模拟题主的数据,然后做窗口宽度为10的滑动均值,结果显示,和最初的分段直线非常接近。
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> a = np.arange(0, 0.5, 0.01)
>>> b = np.arange(0.5, 1, 0.01)
>>> c = np.arange(1, 3, 0.01)
>>> d = np.arange(3, 3.5, 0.01)
>>> e = np.arange(3.5, 5, 0.01)
>>> f = np.arange(5, 5.5, 0.01)
>>> g = np.arange(5.5, 7, 0.01)
>>> A = 2*a + 10
>>> B = -2*b + 12
>>> C = np.ones_like(c)*10
>>> D = -2*d + 16
>>> E = np.ones_like(e)*9
>>> F = 2*f - 1
>>> G = np.ones_like(g)*10
>>> data = np.hstack((A,B,C,D,E,F,G))
>>> plt.plot(data)
[<matplotlib.lines.Line2D object at 0x000001DD8884EE48>]
>>> plt.show()
>>> data += (np.random.random(data.size)-0.5)*0.2
>>> plt.plot(data)
[<matplotlib.lines.Line2D object at 0x000001DD88BEE608>]
>>> plt.show()
>>> w = np.ones(10)/10
>>> data = np.convolve(w, data)[10:-10]
>>> plt.plot(data)
[<matplotlib.lines.Line2D object at 0x000001DD8880EE48>]
>>> plt.show()