主要内容

最近邻搜索的代码生成

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

训练最近邻搜索器

装载Fisher的Iris数据集。

负载fisheriris

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

RNG('默认');重复性的%1) n =大小(量;%样本大小qIdx = randsample (n, 5);%查询数据索引X =量(~ ismember (1: n, qIdx):);: Y =量(qIdx);

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

mdl = utefiveSearcher(X,'距离'闵可夫斯基的“P”,1);

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

idx = knnsearch(mdl,y);

使用代码使用saveLearnerForCoderloadLearnerForCoder

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

使用穷举搜索器将详尽的搜索器保存到文件中saveLearnerForCoder

saveLearnerForCoder (Mdl'Sexchermodel'

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

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

类型Myknnsearch1.M.%显示myknnsearch1的内容。m文件
function idx = myknnsearch1(Y) %#codegen Mdl = loadLearnerForCoder('searcherModel');idx = knnsearch (Mdl Y);结束

注意:如果单击此页面的右上角的按钮,请在MATLAB®中打开此示例,然后Matlab®打开示例文件夹。此文件夹包含入口点函数文件,Myknnsearch1.M.myknnsearch2.m., 和myknnsearch3.m

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

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

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

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

myidx1 = myknnsearch1(y);myidx1_mex = myknnsearch1_mex(y);

比较myIdx1myIdx1_mex通过使用isequal

验证evex1 = isequal(idx,myidx1,myidx1_mex)
verifyMEX1 =逻辑1

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

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

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

定义入口点函数myknnsearch2将详尽的搜索器模型和查询数据作为输入参数,而不是在函数中加载模型。

类型myknnsearch2.m.%显示myknnsearch2.m文件的内容
函数IDX = myknnsearch2(mdl,y)%#codegen idx = knnsearch(mdl,y);结束

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

codegenmyknnsearch2arg游戏{编码器.Constant(MDL),Coder.typeof(y,[Inf,4],[1,0])}
代码生成成功。

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

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

myidx2 = myknnsearch2(mdl,y);myidx2_mex = myknnsearch2_mex(mdl,y);验证ex2 = isequal(idx,myidx2,myidx2_mex)
verifyMEX2 =逻辑1

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

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

类型myknnsearch3.m%显示myknnsearch3的内容。m文件
函数IDX = myknnsearch3(MDL,Y,varargin)%#codegen idx = knnsearch(mdl,y,varargin {:});结束

要生成允许用户定义的闵可夫斯基距离指数的代码,请包含{coder.constant('p'),0}在里面arg游戏的价值codegen.使用编码器.Constant.(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_mex)
verifyMEX3 =逻辑1

另请参阅

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

相关话题