如何在 MATLAB 中查找和标记具有微小方差的最频繁值?

How to find and label the most frequent values with a tiny variance in MATLAB?

我有一个向量 d:

d = [
1.19011941712580e-06
6.39136179286748e-06
1.26442316296575e-05
1.81039120389278e-05
1.91304903300688e-05
2.19912290910362e-05
2.94113112667430e-05
3.42238417249065e-05
4.14201181268186e-05
5.76014376298924e-05
6.81337071520188e-05
0.000108396864465101
0.000130922201344182
0.000145712942644687
0.000174386494384153
0.000262758083529471
03050975943883
0.000373066486719321
0.000423949134658855
0.000489079623696380
0.000548432526451254
0.000694787830192734
0.000881370593483890
0.00125516689720339
0.00145237435686831
0.00815957230852142
0.0210146005799470
0.0507995676939279
0.0541594307796186
1
]

绘图d:

plot(d, 'x:')

在这种情况下,[M, F] = mode(d) 给出了我不想要的结果。

是否有计算最频繁值的函数,并考虑了某种公差?

可以考虑聚类。但是,在上图中,聚类可能会将 d(27:29) 分配到左侧聚类中。

当前的方法是规范化和阈值化:

d_norm = d / max(d);
v = d_norm(d_norm < 0.01); % 1 percent threshold

但是,我认为这是一种硬编码,不是一个好方法。

Histcounts 是你的朋友!

如果您知道自己的范围,您的 "threshold" 可以很容易地转换为直方图 bin。在您的情况下,范围是 0-1,如果您选择 0.01 的阈值,则 100 是您的 bin 计数。

counts=histcounts(d,100)