Найдите всех соседей на заданном расстоянии с помощью входных данных
Idx = rangesearch(X,Y,r)[Idx,D] =
rangesearch(X,Y,r)[Idx,D] =
rangesearch(X,Y,r,Name,Value)Найдите точки X, которые являются на Евклидовом расстоянии 1.5 каждой точки Y. И X и Y являются выборками пятимерных нормально распределенных переменных.
rng('default') % For reproducibility X = randn(100,5); Y = randn(10,5); [Idx,D] = rangesearch(X,Y,1.5)
Idx = 10x1 cell array
{1x7 double}
{1x2 double}
{1x11 double}
{1x2 double}
{1x12 double}
{1x9 double}
{[ 89]}
{1x0 double}
{1x0 double}
{1x0 double}
D = 10x1 cell array
{1x7 double}
{1x2 double}
{1x11 double}
{1x2 double}
{1x12 double}
{1x9 double}
{[ 1.1739]}
{1x0 double}
{1x0 double}
{1x0 double}
В этом случае последние три точки Y являются больше, чем расстояние 1.5 далеко от любой точки X. X(89,:) является расстоянием 1.1739 далеко от Y(7,:), и никакой другой точкой X не является на расстоянии 1.5 Y(7,:). X содержит точки 12 на расстоянии 1.5 Y(5,:).
Сгенерируйте 5 000 случайных точек от каждого из трех отличных многомерных нормальных распределений. Переключите средние значения дистрибутивов так, чтобы случайным образом сгенерированные точки, вероятно, сформировали три отдельных кластера.
rng('default') % For reproducibility N = 5000; dist = 10; X = [mvnrnd([0 0],eye(2),N); mvnrnd(dist*[1 1],eye(2),N); mvnrnd(dist*[-1 -1],eye(2),N)];
Для каждой точки в X найдите точки в X, которые являются в радиусе dist далеко от точки. Для более быстрого вычисления задайте, чтобы сохранить индексы самых близких соседей неотсортированными. Выберите первую точку в X и найдите ее самых близких соседей.
Idx = rangesearch(X,X,dist,'SortIndices',false);
x = X(1,:);
nearestPoints = X(Idx{1},:);Найдите значения в X, которые не являются самыми близкими соседями x. Отобразите те точки в одном цвете и самых близких соседях x в различном цвете. Маркируйте точку x черным, заполненным кругом.
nonNearestIdx = true(size(X,1),1);
nonNearestIdx(Idx{1}) = false;
scatter(X(nonNearestIdx,1),X(nonNearestIdx,2))
hold on
scatter(nearestPoints(:,1),nearestPoints(:,2))
scatter(x(1),x(2),'black','filled')
hold off
Найдите пациентов в наборе данных patients, которые являются в определенном возрасте и области значений веса пациентов в Y.
Загрузите набор данных patients. Значения Age находятся в годах, и значения Weight находятся в фунтах.
load patients X = [Age Weight]; Y = [20 162; 30 169; 40 168]; % New patients
Создайте пользовательскую функцию расстояния distfun, который определяет расстояние между пациентами с точки зрения возраста и веса. Например, согласно distfun, два пациента, которые на расстоянии в один год в возрасте и имеют тот же вес, являются одной единицей расстояния независимо. Точно так же два пациента, которые имеют тот же возраст и на расстоянии в пять фунтов в весе, являются также одной единицей расстояния независимо.
type distfun.m % Display contents of distfun.m file
function D2 = distfun(ZI,ZJ) ageDifference = abs(ZI(1)-ZJ(:,1)); weightDifference = abs(ZI(2)-ZJ(:,2)); D2 = ageDifference + 0.2*weightDifference; end
Примечание: Если вы нажимаете кнопку, расположенную в верхнем правом разделе этого примера, и открываете пример в MATLAB®, затем MATLAB открывает папку в качестве примера. Эта папка включает файл функции distfun.m.
Найдите пациентов в X, которые являются на расстоянии 2 пациентов в Y.
[Idx,D] = rangesearch(X,Y,2,'Distance',@distfun)Idx = 3x1 cell array
{1x0 double}
{1x0 double}
{[ 41]}
D = 3x1 cell array
{1x0 double}
{1x0 double}
{[ 1.8000]}
Третий пациент в Y является единственным, чтобы иметь пациента в X на расстоянии 2.
Отобразите Age и значения Weight для самого близкого пациента в X пациенту с возрастом 40 и вес 168.
X(Idx{3},:)ans = 1×2
39 164
X Входные данныеВходные данные, заданные как mx-by-n числовая матрица, где каждая строка представляет один n - размерная точка. Количество столбцов n должно равняться количеству столбцов в Y.
Типы данных: single | double
Y Точки запросаТочки запроса, заданные как my-by-n числовая матрица, где каждая строка представляет один n - размерная точка. Количество столбцов n должно равняться количеству столбцов в X.
Типы данных: single | double
r Поисковый радиусУкажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
rangesearch(X,Y,1.4,'Distance','seuclidean','Scale',iqr(X)) задает, чтобы найти все наблюдения в X на расстоянии 1.4 каждого наблюдения в Y, с помощью стандартизированного Евклидова расстояния, масштабируемого межквартильным размахом X.'NSMethod' — Самый близкий соседний метод поиска'kdtree' | 'exhaustive'Самый близкий соседний метод поиска, заданный как пара, разделенная запятой, состоящая из 'NSMethod' и одно из этих значений.
| Значение | Описание |
|---|---|
'kdtree' | Создайте и используйте d-дерево K, чтобы найти самых близких соседей.
|
'exhaustive' | Используйте алгоритм исчерпывающего поиска. Программное обеспечение вычисляет расстояния от всех точек X до каждой точки Y, чтобы найти самых близких соседей. |
'kdtree' является значением по умолчанию, когда количество столбцов в X меньше чем или равно 10, X не разрежен, и метрика расстояния является одной из допустимых метрик 'kdtree'. В противном случае значением по умолчанию является 'exhaustive'.
Пример: 'NSMethod','exhaustive'
'Distance' — Метрика расстояния'euclidean' (значение по умолчанию) | 'seuclidean' | 'mahalanobis' | 'cityblock' | 'minkowski' | 'chebychev' | указатель на функцию |...Метрика расстояния, которую rangesearch использует, заданный как пара, разделенная запятой, состоящая из 'Distance' и одно из значений в этой таблице.
| Значение | Описание |
|---|---|
'euclidean' | Евклидово расстояние. |
'seuclidean' | Стандартизированное Евклидово расстояние. Каждое координатное различие между строкой в X и точкой запроса масштабируется путем деления на соответствующий элемент стандартного отклонения, вычисленного из X, nanstd(X). Чтобы задать другое масштабирование, используйте аргумент пары "имя-значение" 'Scale'. |
'mahalanobis' | Расстояние Mahalanobis, вычисленное использование положительной определенной ковариационной матрицы C. Значение по умолчанию C является матрицей выборочной ковариации X, как вычислено nancov(X). Чтобы задать различное значение для C, используйте аргумент пары "имя-значение" 'Cov'. |
'cityblock' | Расстояние городского квартала. |
'minkowski' | Расстояние Минковскего. Экспонентой по умолчанию является 2. Чтобы задать различную экспоненту, используйте аргумент пары "имя-значение" 'P'. |
'chebychev' | Расстояние Чебычева (максимум координируют различие). |
'cosine' | Один минус косинус включенного угла между наблюдениями (обработанный как векторы). |
'correlation' | Один минус демонстрационная линейная корреляция между наблюдениями (обработанный как последовательности значений). |
'hamming' | Расстояние Хемминга, процент координат, которые отличаются. |
'jaccard' | Один минус коэффициент Jaccard, процент ненулевых координат, которые отличаются. |
'spearman' | Один минус порядковая корреляция демонстрационного Копьеносца между наблюдениями (обработанный как последовательности значений). |
| Пользовательский указатель на функцию расстояния. Функция расстояния имеет форму function D2 = distfun(ZI,ZJ) % calculation of distance ...
|
Для получения дополнительной информации смотрите Метрики Расстояния.
Пример: 'Distance','minkowski'
P Экспонента для метрики расстояния Минковскего2 (значение по умолчанию) | положительная скалярная величинаЭкспонента для метрики расстояния Минковскего, заданной как пара, разделенная запятой, состоящая из 'P' и положительной скалярной величины. Этот аргумент допустим, только если 'Distance' является 'minkowski'.
Пример: 'P',4
Типы данных: single | double
cov Ковариационная матрица для метрики расстояния Mahalanobisnancov(X) (значение по умолчанию) | положительная определенная матрицаКовариационная матрица для метрики расстояния Mahalanobis, заданной как пара, разделенная запятой, состоящая из 'Cov' и положительной определенной матрицы. Этот аргумент допустим только, когда 'Distance' является 'mahalanobis'.
Пример: 'Cov',eye(4)
Типы данных: single | double
шкала Значение масштабного коэффициента для стандартизированной Евклидовой метрики расстоянияnanstd(X) (значение по умолчанию) | неотрицательный векторЗначение масштабного коэффициента для стандартизированной Евклидовой метрики расстояния, заданной как пара, разделенная запятой, состоящая из 'Scale' и неотрицательного вектора. Scale имеет длину, равную количеству столбцов в X. Каждое координатное различие между строкой в X и точкой запроса масштабируется соответствующим элементом Scale. Этот аргумент допустим только, когда 'Distance' является 'seuclidean'.
Пример: 'Scale',iqr(X)
Типы данных: single | double
'BucketSize' — Максимальное количество точек данных в вершине d-дерева K50 (значение по умолчанию) | положительный целочисленный скалярМаксимальное количество точек данных в вершине d-дерева K, заданного как пара, разделенная запятой, состоящая из 'BucketSize' и положительного целочисленного скаляра. Этот аргумент допустим только, когда NSMethod является 'kdtree'.
Пример: 'BucketSize',20
Типы данных: single | double
'SortIndices' — Отметьте, чтобы отсортировать возвращенные индексы согласно расстояниюtrue (1) (значение по умолчанию) | false (0)Отметьте, чтобы отсортировать возвращенные индексы согласно расстоянию, заданному как пара, разделенная запятой, состоящая из 'SortIndices' и или true (1) или false (0).
Для более быстрой производительности, когда Y содержит много наблюдений, которые имеют много самых близких точек в X, можно установить SortIndices на false. В этом случае rangesearch возвращает индексы самых близких точек без определенного порядка. Когда SortIndices является true, функция располагает индексы самых близких точек в порядке возрастания расстоянием.
Пример: 'SortIndices',false
Типы данных: логический
Idx Индексы самых близких точекИндексы самых близких точек, возвращенных как массив ячеек числовых векторов.
Idx является my-by-1 массив ячеек, где my является количеством строк в Y. Векторный Idx{j} содержит индексы точек (строки) в X, расстояния которого до Y(j,:) не больше, чем r. Если SortIndices является true, то rangesearch располагает индексы в порядке возрастания расстоянием.
D Расстояния самых близких точек к точкам запросаРасстояния самых близких точек к точкам запроса, возвращенным как массив ячеек числовых векторов.
D является my-by-1 массив ячеек, где my является количеством строк в Y. D{j} содержит значения расстояния между Y(j,:) и точками (строки) в X(Idx{j},:). Если SortIndices является true, то rangesearch располагает расстояния в порядке возрастания.
Для фиксированного положительного действительного значения r rangesearch находит все точки X, которые являются на расстоянии r каждой точки Y. Найти k указывает в X, которые являются самыми близкими к каждой точке Y, для фиксированного положительного целочисленного k, используют knnsearch.
rangesearch не сохраняет поисковый объект. Чтобы создать поисковый объект, используйте createns.
Для обзора алгоритма d-дерева k см., что Соседний Поиск k-Nearest Использует Kd-дерево.
Алгоритм исчерпывающего поиска находит расстояние от каждой точки в X к каждой точке в Y.
Если вы устанавливаете аргумент пары "имя-значение" 'NSMethod' функции rangesearch соответствующему значению ('exhaustive' для алгоритма исчерпывающего поиска или 'kdtree' для алгоритма d-дерева K), то результаты поиска эквивалентны результатам, полученным путем проведения поиска расстояния использование функции объекта rangesearch. В отличие от функции rangesearch, функция объекта rangesearch требует объект модели KDTreeSearcher или ExhaustiveSearcher.
Указания и ограничения по применению:
Для генерации кода значением по умолчанию аргумента пары "имя-значение" 'NSMethod' является 'exhaustive', когда количество столбцов в X больше, чем 7.
Значение аргумента пары "имя-значение" 'Distance' должно быть постоянным временем компиляции и не может быть пользовательской функцией расстояния.
Аргумент пары "имя-значение" 'SortIndices' не поддержан. Выходные аргументы всегда сортируются.
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, чтобы позволить пользовательскую экспоненту для расстояния Минковскего в сгенерированном коде, включайте {coder.Constant('Distance'),coder.Constant('Minkowski'),coder.Constant('P'),0} в значение -args codegen.
Отсортированный порядок связанных расстояний в сгенерированном коде может отличаться от порядка в MATLAB® из-за числовой точности.
Когда rangesearch использует kd-алгоритм-поиска-по-дереву, и типом сборки генерации кода является MEX-функция, codegen генерирует MEX-функцию с помощью Intel® Threading Building Blocks (TBB) для параллельного вычисления. В противном случае codegen генерирует код с помощью parfor.
MEX-функция для kd-алгоритма-поиска-по-дереву — codegen генерирует оптимизированное использование MEX-функции Intel TBB для параллельного вычисления на многожильных платформах. Можно использовать MEX-функцию, чтобы ускорить алгоритмы MATLAB. Для получения дополнительной информации на Intel TBB, см. https://software.intel.com/en-us/intel-tbb.
Если вы генерируете MEX-функцию, чтобы протестировать сгенерированный код версии parfor, можно отключить использование Intel TBB. Установите свойство ExtrinsicCalls объекта настройки MEX к false. Для получения дополнительной информации смотрите coder.MexCodeConfig.
MEX-функция для алгоритма исчерпывающего поиска и автономного кода C/C++ для обоих алгоритмов — сгенерированный код rangesearch использует parfor, чтобы создать циклы, которые запускают параллельно на поддерживаемой общей памяти многожильные платформы в сгенерированном коде. Если ваш компилятор не поддерживает интерфейс приложения Open Multiprocessing (OpenMP), или вы отключаете библиотеку OpenMP, MATLAB Coder™ обрабатывает parfor - циклы как for - циклы. Чтобы найти поддерживаемые компиляторы, см. Поддерживаемые Компиляторы. Чтобы отключить библиотеку OpenMP, установите свойство EnableOpenMP объекта настройки к false. Для получения дополнительной информации смотрите coder.CodeConfig.
Для получения дополнительной информации о генерации кода смотрите Введение в Генерацию кода и Общий Рабочий процесс Генерации кода.
ExhaustiveSearcher | KDTreeSearcher | createns | knnsearch | pdist2
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.