Объект функционирует 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 (MATLAB Coder). Задайте тип данных и размерность входного параметра при помощи coder.typeof (MATLAB Coder) так, чтобы сгенерированный код принял массив переменного размера.
codegen myknnsearch1 -args {coder.typeof(Y,[Inf,4],[1,0])}
Code generation successful.
Для более подробного примера генерации кода, который использует 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 (MATLAB Coder) принимает время компиляции постоянный объект искателя.
Задайте функцию точки входа myknnsearch2 это берет обоих исчерпывающая модель искателя и данные о запросе как входные параметры вместо того, чтобы загрузить модель в функции.
type myknnsearch2.m % Display contents of myknnsearch2.m file
function idx = myknnsearch2(Mdl,Y) %#codegen idx = knnsearch(Mdl,Y); end
Чтобы сгенерировать код, который берет объект модели, а также данные о запросе, назовите объект модели как время компиляции постоянным при помощи coder.Constant (MATLAB Coder) и включает постоянный свернутый объект модели в -args значение codegen.
codegen myknnsearch2 -args {coder.Constant(Mdl),coder.typeof(Y,[Inf,4],[1,0])}
Code generation successful.
Рабочий процесс генерации кода с постоянным свернутым объектом модели следует за общим рабочим процессом генерации кода. Для получения дополнительной информации смотрите Общий Рабочий процесс Генерации кода.
Проверьте тот myknnsearch2 и файл MEX возвращает те же результаты.
myIdx2 = myknnsearch2(Mdl,Y); myIdx2_mex = myknnsearch2_mex(Mdl,Y); verifyMEX2 = isequal(Idx,myIdx2,myIdx2_mex)
verifyMEX2 = logical
1
Задайте функцию точки входа myknnsearch3 это берет объект модели, данные о запросе и аргументы пары "имя-значение". Можно допускать дополнительные аргументы name-value путем определения 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 (MATLAB Coder), потому что имя аргумента пары "имя-значение" должно быть постоянным временем компиляции.
codegen myknnsearch3 -args {coder.Constant(Mdl),coder.typeof(Y,[Inf,4],[1,0]),coder.Constant('P'),0}
Code generation successful.
Проверьте тот 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
codegen (MATLAB Coder) | saveLearnerForCoder | loadLearnerForCoder | knnsearch | rangesearch | ExhaustiveSearcher | KDTreeSearcher