Объект функционирует knnsearch
и rangesearch
из самых близких соседних объектов искателя, ExhaustiveSearcher
и KDTreeSearcher
, поддержите генерацию кода. В этом примере показано, как сгенерировать код для нахождения, что самый близкий сосед, использующий исчерпывающего искателя, возражает в командной строке. Пример показывает два различных способа сгенерировать код, в зависимости от способа, которым вы используете объект: загрузите объект при помощи loadLearnerForCoder
в функции точки входа и передаче время компиляции постоянный объект к сгенерированному коду.
Загрузите ирисовый набор данных Фишера.
load fisheriris
Удалите пять ирисовых диафрагм случайным образом из данных о предикторе, чтобы использовать в качестве набора запроса.
rng('default'); % For reproducibility n = size(meas,1); % Sample size qIdx = randsample(n,5); % Indices of query data X = meas(~ismember(1:n,qIdx),:); Y = meas(qIdx,:);
Подготовьте исчерпывающего самого близкого соседнего искателя, использующего обучающие данные. Задайте 'Distance'
и 'P'
аргументы пары "имя-значение", чтобы использовать расстояние Минковскего с экспонентой 1 для нахождения самого близкого соседа.
Mdl = ExhaustiveSearcher(X,'Distance','minkowski','P',1);
Найдите индекс обучающих данных (X
) это - самый близкий сосед каждой точки в данных о запросе (Y
).
Idx = knnsearch(Mdl,Y);
saveLearnerForCoder
и loadLearnerForCoder
Сгенерируйте код, который загружает исчерпывающего искателя, берет данные о запросе в качестве входного параметра, и затем находит самого близкого соседа.
Сохраните исчерпывающего искателя в файл с помощью saveLearnerForCoder
.
saveLearnerForCoder(Mdl,'searcherModel')
saveLearnerForCoder
сохраняет модель в двоичный файл MATLAB searcherModel.mat как массив структур в текущей папке.
Задайте функцию точки входа myknnsearch1
это берет данные о запросе в качестве входного параметра. В функции загрузите объект искателя при помощи loadLearnerForCoder
, и затем передайте загруженную модель knnsearch
.
type myknnsearch1.m % Display contents of myknnsearch1.m file
function idx = myknnsearch1(Y) %#codegen Mdl = loadLearnerForCoder('searcherModel'); idx = knnsearch(Mdl,Y); end
Примечание: Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB®, затем MATLAB® открывает папку в качестве примера. Эта папка включает файлы функции точки входа, myknnsearch1.m
, myknnsearch2.m
, и myknnsearch3.m
.
Сгенерируйте код для myknnsearch1
при помощи codegen
. Задайте тип данных и размерность входного параметра при помощи coder.typeof
так, чтобы сгенерированный код принял массив переменного размера.
codegen myknnsearch1 -args {coder.typeof(Y,[Inf,4],[1,0])}
Для более подробного примера генерации кода, который использует saveLearnerForCoder
и loadLearnerForCoder
, смотрите Генерацию кода для Прогноза Модели Машинного обучения в Командной строке. Для получения дополнительной информации об определении аргументов переменного размера, смотрите, Задают Аргументы Переменного Размера для Генерации кода.
Передайте данные о запросе (Y
) проверять тот myknnsearch1
и файл MEX возвращает те же индексы.
myIdx1 = myknnsearch1(Y); myIdx1_mex = myknnsearch1_mex(Y);
Сравните myIdx1
и myIdx1_mex
при помощи isequal
.
verifyMEX1 = isequal(Idx,myIdx1,myIdx1_mex)
verifyMEX1 = logical
1
isequal
возвращает логическую единицу (true
) если все входные параметры равны. Это сравнение подтверждает тот myknnsearch1
и файл MEX возвращает те же результаты.
Самые близкие соседние объекты искателя могут быть входным параметром функции, которую вы задаете для генерации кода. -args
опция codegen
примите время компиляции постоянный объект искателя.
Задайте функцию точки входа myknnsearch2
это берет обоих исчерпывающая модель искателя и данные о запросе как входные параметры вместо того, чтобы загрузить модель в функции.
type myknnsearch2.m % Display contents of myknnsearch2.m file
function idx = myknnsearch2(Mdl,Y) %#codegen idx = knnsearch(Mdl,Y); end
Чтобы сгенерировать код, который берет объект модели, а также данные о запросе, назовите объект модели как время компиляции постоянным при помощи coder.Constant
и включайте постоянный свернутый объект модели в -args
значение codegen
.
codegen myknnsearch2 -args {coder.Constant(Mdl),coder.typeof(Y,[Inf,4],[1,0])}
Рабочий процесс генерации кода с постоянным свернутым объектом модели следует за общим рабочим процессом генерации кода. Для получения дополнительной информации смотрите Общий Рабочий процесс Генерации кода.
Проверьте тот myknnsearch2
и файл MEX возвращает те же результаты.
myIdx2 = myknnsearch2(Mdl,Y); myIdx2_mex = myknnsearch2_mex(Mdl,Y); verifyMEX2 = isequal(Idx,myIdx2,myIdx2_mex)
verifyMEX2 = logical
1
Задайте функцию точки входа myknnsearch3
это берет объект модели, данные о запросе и аргументы пары "имя-значение". Можно допускать дополнительные аргументы значения имени путем определения varargin
как входной параметр. Для получения дополнительной информации смотрите Генерацию кода для Списков аргументов Переменной длины (MATLAB Coder).
type myknnsearch3.m % Display contents of myknnsearch3.m file
function idx = myknnsearch3(Mdl,Y,varargin) %#codegen idx = knnsearch(Mdl,Y,varargin{:}); end
Чтобы сгенерировать код, который позволяет пользовательскую экспоненту для расстояния Минковскего, включайте {coder.Constant('P'),0}
в -args
значение codegen
. Используйте coder.Constant
потому что имя аргумента пары "имя-значение" должно быть постоянным временем компиляции.
codegen myknnsearch3 -args {coder.Constant(Mdl),coder.typeof(Y,[Inf,4],[1,0]),coder.Constant('P'),0}
Проверьте тот myknnsearch3
и файл MEX возвращает те же результаты.
newIdx = knnsearch(Mdl,Y,'P',2); myIdx3 = myknnsearch3(Mdl,Y,'P',2); myIdx3_mex = myknnsearch3_mex(Mdl,Y,'P',2); verifyMEX3 = isequal(newIdx,myIdx3,myIdx3_mex)
verifyMEX3 = logical
1
ExhaustiveSearcher
| KDTreeSearcher
| codegen
| knnsearch
| loadLearnerForCoder
| rangesearch
| saveLearnerForCoder