主要内容

最近邻搜索器的代码生成

对象的功能knnsearchrangesearch最近邻搜索者的目标,穷举搜索器KDTreeSearcher,支金宝app持代码生成。这个示例演示了如何在命令行中使用穷举搜索器对象生成查找最近邻居的代码。该示例显示了生成代码的两种不同方法,这取决于您使用对象的方式:通过使用加载对象loadLearnerForCoder在入口点函数中,并将编译时常量对象传递给生成的代码。

训练穷举最近邻搜索器

加载Fisher的虹膜数据集。

负载鱼腥草

从预测器数据中随机移除五个虹膜以用作查询集。

rng(“默认”);%为了再现性1) n =大小(量;%样本大小qIdx = randsample (n, 5);%查询数据索引X =量(~ ismember (1: n, qIdx):);: Y =量(qIdx);

使用培训数据准备一个详尽的最近邻搜索器。指定“距离”“P”名称-值对参数使用指数为1的Minkowski距离来寻找最近的邻居。

Mdl=排气搜索器(X,“距离”闵可夫斯基的“P”,1);

找到训练数据的索引(X),即查询数据中每个点的最近邻(Y).

Idx=knnsearch(Mdl,Y);

使用生成代码saveLearnerForCoderloadLearnerForCoder

生成加载详尽搜索器的代码,将查询数据作为输入参数,然后查找最近的邻居。

使用将详尽搜索程序保存到文件中saveLearnerForCoder

saveLearnerForCoder (Mdl“searcherModel”

saveLearnerForCoder将模型保存到MATLAB二进制文件中searcherModel.mat作为当前文件夹中的结构数组。

定义入口点函数myknnsearch1它将查询数据作为输入参数。在函数中,使用loadLearnerForCoder,然后将加载的模型传递给knnsearch

类型MYKNN搜索1.m%显示myknnsearch1的内容。m文件
函数idx = myknnsearch1(Y) %#codegen Mdl = loadLearnerForCoder('搜索模型');idx = knnsearch (Mdl Y);结束

注意:如果单击此页面右上角的按钮并在MATLAB®中打开此示例,MATLAB®将打开示例文件夹。此文件夹包括入口点函数文件,MYKNN搜索1.mMYKN2.mmyknnsearch3.m

生成的代码myknnsearch1通过使用codegen(MATLAB编码器)。使用指定输入参数的数据类型和维度编码员(MATLAB编码器)因此,生成的代码接受一个可变大小的数组。

codegenmyknnsearch1arg游戏{coder.typeof (Y,[正无穷,4],[1,0])}
代码生成成功。

以获取更详细的代码生成示例saveLearnerForCoderloadLearnerForCoder,请参阅机器学习模型在命令行预测的代码生成.有关指定变量大小参数的详细信息,请参见为代码生成指定可变大小参数

传递查询数据(Y)以验证myknnsearch1MEX文件返回相同的索引。

myIdx1=myknnsearch1(Y);myIdx1_-mex=myknsearch1_-mex(Y);

比较myIdx1myIdx1_mex通过使用isequal

verifyMEX1=isequal(Idx,myIdx1,myIdx1\u-mex)
verifyMEX1 =逻辑1

isequal返回逻辑1(符合事实的),如果所有输入相等。这个比较证实了myknnsearch1MEX文件返回相同的结果。

使用常数折叠模型对象生成代码

最近邻搜索器对象可以是为代码生成而定义的函数的输入参数。的arg游戏选择codegen(MATLAB编码器)接受编译时常量搜索器对象。

定义入口点函数myknnsearch2它将穷举搜索器模型和查询数据作为输入参数,而不是将模型加载到函数中。

类型MYKN2.m%显示myknSearch2.m文件的内容
函数idx=MyKNSearch2(Mdl,Y)%35; codegen idx=KNSearch(Mdl,Y);结束

要生成接受模型对象和查询数据的代码,可以使用编码器常数(MATLAB编码器)并将常量折叠模型对象包含在arg游戏的价值codegen

codegenmyknnsearch2arg游戏{coder.Constant(Mdl),coder.typeof(Y[Inf,4],[1,0])}
代码生成成功。

具有常量折叠模型对象的代码生成工作流遵循一般的代码生成工作流。有关详细信息,请参见通用代码生成工作流

验证myknnsearch2MEX文件返回相同的结果。

myIdx2=MyKNSearch2(Mdl,Y);myIdx2_-mex=MyKNSearch2_-mex(Mdl,Y);verifyMEX2=isequal(Idx,myIdx2,myIdx2_-mex)
verifyMEX2 =逻辑1

使用名称-值对参数生成代码

定义入口点函数myknnsearch3它接受模型对象、查询数据和名称-值对参数。您可以通过指定变长度输入宗量作为输入参数。有关详细信息,请参见可变长度参数列表的代码生成(MATLAB编码器)

类型myknnsearch3.m%显示myknnsearch3的内容。m文件
函数idx=myknSearch3(Mdl,Y,varargin)%#codegen idx=knSearch(Mdl,Y,varargin{:});终止

要生成允许用户定义Minkowski距离指数的代码,包括{coder.Constant('P'),0}arg游戏的价值codegen.使用编码器常数(MATLAB编码器)因为名称-值对参数的名称必须是编译时常量。

codegenmyknnsearch3arg游戏{coder.Constant (Mdl)、coder.typeof (Y,[正无穷,4],[1,0]),coder.Constant(“P”),0}
代码生成成功。

验证myknnsearch3MEX文件返回相同的结果。

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\u-mex)
验证MEX3=逻辑1

另请参阅

(MATLAB编码器)||||||

相关话题