2024-09-30 16:39:00 发布
网友
我有一个类似下面的示例图,我用数组x中的一组(x,y)值绘制了它
http://bubblebird.com/images/t.png
如您所见,该图像具有4000到5100之间的密集峰值
我确切的问题是,我能通过编程找到这个图最密集的区域吗? 也就是说。。对于数组X,如何找到该图密集的范围? 对于这个数组,它是4000-5100。 为了简单起见,假设数组只有一个密集区域。 感谢你能提出一个伪代码/代码。在
您可以计算相邻值之间的绝对差,然后用滑动窗口稍微平滑一下,然后找到区域,其中平滑的绝对差值为最大值的50%。在
使用python(标记中有python),如下所示:
a = ( 10, 11, 9, 10, 18, 5, 20, 6, 15, 10, 9, 11 ) diffs = [abs(i[0]-i[1]) for i in zip(a,a[1:])] # [1, 2, 1, 8, 13, 15, 14, 9, 5, 1, 2] maximum = max(diffs) # 15 result = [i>maximum/2 for i in diffs] # [False, False, False, True, True, True, True, True, False, False, False]
您可以使用分类算法(例如k-means),将数据拆分为多个簇,并找到权重最大的簇
你可以利用移动窗口上信号的方差。 以下是一个示例(请参阅随附的图表,其中测试信号为红色,加窗方差为绿色,过滤信号为蓝色):
:
测试信号生成:
import numpy as np X = np.arange(200) - 100. Y = (np.exp(-(X/10)**2) + np.exp(-((np.abs(X)-50.)/2)**2)/3.) * np.cos(X * 10.)
计算移动窗口方差:
得到方差高的指标(这里我选择优于最大方差一半的标准方差。。。您可以根据您的情况进行调整):
idx = np.where(variance > 0.5 * np.max(variance)) X_min = np.min(X[idx]) # -14.0 X_max = np.max(X[idx]) # 15.0
或过滤信号(将低方差点设为零)
Y_modified = np.where(variance > 0.5 * np.max(variance), Y, 0)
您可以计算相邻值之间的绝对差,然后用滑动窗口稍微平滑一下,然后找到区域,其中平滑的绝对差值为最大值的50%。在
使用python(标记中有python),如下所示:
您可以使用分类算法(例如k-means),将数据拆分为多个簇,并找到权重最大的簇
你可以利用移动窗口上信号的方差。 以下是一个示例(请参阅随附的图表,其中测试信号为红色,加窗方差为绿色,过滤信号为蓝色):
:
测试信号生成:
计算移动窗口方差:
^{pr2}$得到方差高的指标(这里我选择优于最大方差一半的标准方差。。。您可以根据您的情况进行调整):
或过滤信号(将低方差点设为零)
相关问题 更多 >
编程相关推荐