Найдите всех соседей на заданном расстоянии с помощью входных данных
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.