Есть точки на плоскости с целочисленными координатами, причем много точек с одинаковыми координатами.
Координаты точек в массивах X и Y. Как удалить без for дубликаты точек так чтобы каждая точка встречалась только один раз? Т.е. чтобы на выходе получилось два новых коротких массива X1 и Y1.
Удалить дубликаты точек
Модератор: Admin
Re: Удалить дубликаты точек
tur91 писал(а):... без for ...
Код: Выделить всё
xy1 = unique([X(:),Y(:)],'rows');
Re: Удалить дубликаты точек
abobroff , наверное я плохо объяснил. Есть скажем 100 точек. Каждая имеет координату X и Y. Итого в массиве X 100 чисел, координат х этих 100 точек. В массиве Y тоже 100 чисел координат y тех же 100 точек.
Причем известно, что например 30 точек из этих 100 точек повторяются дважды, т.е. всего 70 точек, но некоторые повторяются дважды или трижды и т.д. итого набегает 100 точек.
xy1 = unique([X(:),Y(:)],'rows'); - это не работает
вот медленный код
Причем известно, что например 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
Re: Удалить дубликаты точек
abobroff , спасибо. Вы правы, все работает. При первом рассмотрении я не понял Ваш код. Спасибо.