Удалить дубликаты точек

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

tur91
Пользователь
Сообщения: 142
Зарегистрирован: Пн май 05, 2008 4:22 pm

Удалить дубликаты точек

Сообщение tur91 » Вс дек 15, 2013 4:53 pm

Есть точки на плоскости с целочисленными координатами, причем много точек с одинаковыми координатами.
Координаты точек в массивах X и Y. Как удалить без for дубликаты точек так чтобы каждая точка встречалась только один раз? Т.е. чтобы на выходе получилось два новых коротких массива X1 и Y1.

abobroff
Пользователь
Сообщения: 488
Зарегистрирован: Пн окт 25, 2010 1:21 pm

Re: Удалить дубликаты точек

Сообщение abobroff » Вс дек 15, 2013 7:59 pm

tur91 писал(а):... без for ...

Код: Выделить всё

xy1 = unique([X(:),Y(:)],'rows');

tur91
Пользователь
Сообщения: 142
Зарегистрирован: Пн май 05, 2008 4:22 pm

Re: Удалить дубликаты точек

Сообщение tur91 » Вс дек 15, 2013 8:44 pm

abobroff , наверное я плохо объяснил. Есть скажем 100 точек. Каждая имеет координату X и Y. Итого в массиве X 100 чисел, координат х этих 100 точек. В массиве Y тоже 100 чисел координат y тех же 100 точек.
Причем известно, что например 30 точек из этих 100 точек повторяются дважды, т.е. всего 70 точек, но некоторые повторяются дважды или трижды и т.д. итого набегает 100 точек.
xy1 = unique([X(:),Y(:)],'rows'); - это не работает
вот медленный код

Код: Выделить всё

function [X Y] = delete_some_points(x, y)
X = x(1); Y = y(1);
for i = 2:numel(x)
  flag = 1;
  for j = 1:numel(X)
    if x(i) == X(j) && y(i) == Y(j)
      flag = 0; break
    end
  end
  if flag == 1
    X = [X; x(i)]; Y = [Y; y(i)];
  end
end

tur91
Пользователь
Сообщения: 142
Зарегистрирован: Пн май 05, 2008 4:22 pm

Re: Удалить дубликаты точек

Сообщение tur91 » Пн дек 16, 2013 12:27 am

abobroff , спасибо. Вы правы, все работает. При первом рассмотрении я не понял Ваш код. Спасибо.