2017-02-22 51 views
0

На рисунке ниже представлен график некоторых (x, y) координат. Как можно видеть, данные грубо делятся на некоторые «группы» x-координат, близкие друг к другу. Можно также видеть, что расстояние между последовательными группами изменяется.Группировка координат, близких друг к другу

Я хотел бы получить индексы для каждой «группы» x-координат, которые затем я могу использовать для «выбора» связанных y-координат.

До сих пор я пытался:

[uniqueValues, ~, uniqueIdx] = uniquetol(x_coordinates,tol); 
indices_group1 = find(uniqueIdx == 1); 
x_group1 = x_coordinates(indicesGroup1); 
y_group1 = y_coordinates(indicesGroup1); 

который несколько делает то, что я хочу; но это плохо работает из-за различного расстояния между группами. Любые идеи о том, как подойти к этому?

enter image description here

+0

Я не понимаю, как изменяется этот пробел в этом коде. Можете ли вы это объяснить? –

+0

@AnderBiguri возможно OP не смог найти 'tol', который хорошо работает ...? –

+0

@ Dev-iL право, это имеет смысл. Я не знаю, как это сделать автоматически, но я предполагаю, что 'tol = 0,005' выполнит эту работу. –

ответ

0

Одним из вариантов было бы использовать алгоритм кластеризации такой, как DBScan. Это должно классифицировать каждую «линию» точек как отдельный кластер, тогда вы можете получить y-координаты для каждого кластера.