如何在 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)
我有一个向量 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)