Попробуйте следующее:
mat = randi(30,50943,3);
vec = [1,2,3];
% R2106b+ code
ind = find(all(mat==vec,2));
% or: explicit expansion, works with all versions
ind = find(all(bsxfun(@eq,mat,vec),2));
Что это делает:
==
или eq
проверит, равны ли координаты (дает матрицу [50943x3] bool)
all
вернет истину, только если все координаты равны
find
возвращает индекс всех ненулевых элементов
Это работает только для точного соответствия (отсюда целочисленные координаты, выбранные с помощью randi
).
Поскольку ответ уже принят, я добавлю ответ @Zep, который предоставит решение для получения ближайшей точки, которая, по-видимому, и была тем, что первоначально искали.
[min_dist,ind_nearest] = min(sum(bsxfun(@minus,mat,vec).^2,2)); % index to the nearest point