【发布时间】:2025-11-23 22:00:02
【问题描述】:
这是我的问题:
我有下一个数据“A”,看起来像:
如您所见,我用红色圆圈绘制了明显的峰,最定义的是 2 和 7,我说它们被定义是因为它的标准偏差与其他峰相比较低(尤其是第二个峰) .
我需要的是一种方法(无论如何)来获取数值数组中 n 个峰值的值和标准差。
我尝试过使用“集群”,但没有得到好的结果:
首先,我使用了“kmeans”MATLAB 函数,我意识到这个算法并没有按照我的需要对峰进行分组。正如您在上图中看到的,在红色圆圈中,该集群的峰值少于 3 或 4 个。而kmeans需要你设置簇数,我需要自动识别。
希望有人能给我一些想法,或者获得更好结果的方法,谢谢。
Pd:我将数据“A”留在下一个链接中。
https://drive.google.com/file/d/0B4WGV21GqSL5a2EyQ2l0SHZURzA/edit?usp=sharing
【问题讨论】:
-
您发布的数据只有一个峰,其标准差相对您显示的更高
-
抱歉,我已将文件更改为正确的文件。
-
对您的数据运行这些命令:
[pks,locs]=findpeaks(A(:,2),'threshold',0.15); scatter(A(:,1),A(:,2)) hold on; scatter(A(locs,1),A(locs,2),'ro','filled')如您所见,它们绝不是完美的峰值,而是开始聚类的好点。我把这些点拿来给 kmeans 作为起点,但结果更糟。