Как найти и пометить наиболее частые значения с крошечной дисперсией в MATLAB?

#matlab #signal-processing #eigenvalue

#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
  

Тем не менее, я думаю, что это своего рода жестко запрограммированный и не очень хороший подход.

Комментарии:

1. гистограмма? определенно гистограмма

2. @Ander Biguri, можете ли вы предложить более подробно? например, как можно определить количество ячеек?

3. Я понял, что вам может не понадобиться то, что я опубликовал. Возможно, вам потребуется лучше определить способ вычисления вашего допуска, поскольку первые значения очень близки друг к другу.

Ответ №1:

Histcounts — ваш друг!

Ваш «порог» можно легко перевести в ячейки гистограммы, если вы знаете свой диапазон. В вашем случае диапазон равен 0-1, если вы выберете пороговое значение 0,01, то 100 — это количество ячеек.

 counts=histcounts(d,100) 
  

Комментарии:

1. edges возможно, в виде логарифмического вектора, от 1e-6 до 1 (или 0,1). Не уверен, чего хочет OP.

2. @StewieGriffin да, я думал об этом, но я жду разъяснений