主要内容

最近邻搜索的代码生成

对象功能knnsearch.rangesearch.最近的邻居搜索器对象,令人疲惫的kdtreesearcher.,支万博1manbetx持代码生成。此示例显示如何使用命令行处使用详尽的搜索器对象生成用于查找最近邻居的代码。该示例显示了两种不同的方法来生成代码,具体取决于您使用对象的方式:使用使用的方式加载对象loadlearnerforcoder.在一个入口点函数中,并将编译时常量对象传递给生成的代码。

火车详尽的最近邻搜索者

装载Fisher的Iris数据集。

加载渔民

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

RNG('默认');重复性的%n =尺寸(meas,1);%样本大小qidx = randsample(n,5);查询数据的%指数x = meas(〜ismember(1:n,qidx),:);y = meas(qidx,:);

使用培训数据准备详尽的最近邻搜索员。指定'距离''P'名称 - 值对参数使用Minkowski距离与1的指数用于查找最近的邻居。

mdl = utefiveSearcher(X,'距离''minkowski''P',1);

找到培训数据的索引(X)是查询数据中每个点的最近邻居(y)。

idx = knnsearch(mdl,y);

使用代码使用Savelarnerforcoder.loadlearnerforcoder.

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

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

SavelAlnerForCoder(MDL,'Sexchermodel'

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

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

类型Myknnsearch1.M.%显示myknnsearch1.m文件的内容
函数IDX = myknnsearch1(y)%#codegen mdl = loadlearnerforcoder('sexchermodel');idx = knnsearch(mdl,y);结尾

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

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

Codegen.myknnsearch1.-  args.{coder.typeof(y,[inf,4],[1,0])}

有关使用的更详细的代码生成示例Savelarnerforcoder.loadlearnerforcoder., 看命令行中计算机学习模型预测的代码生成。有关指定可变大小参数的更多详细信息,请参阅指定代码生成的变量大小参数

传递查询数据(y)验证这一点myknnsearch1.并且MEX文件返回相同的索引。

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

比较myidx1.myidx1_mex.通过使用是平等的

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

是平等的返回逻辑1(真的)如果所有输入相等。这种比较证实了这一点myknnsearch1.并且MEX文件返回相同的结果。

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

最近的邻居搜索器对象可以是您为代码生成定义的函数的输入参数。这- args.选择Codegen.(MATLAB编码器)接受编译时常量搜索器对象。

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

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

要生成将模型对象以及查询数据的代码,通过使用将模型对象指定为编译时常数编码器.Constant.(MATLAB编码器)并包括常量折叠模型对象- args.的价值Codegen.

Codegen.myknnsearch2.-  args.{编码器.Constant(MDL),Coder.typeof(y,[Inf,4],[1,0])}

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

验证myknnsearch2.并且MEX文件返回相同的结果。

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

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

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

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

生成允许Minkowski距离的用户定义指数的代码,包括{coder.constant('p'),0}在里面- args.的价值Codegen.。用编码器.Constant.(MATLAB编码器)因为名称 - 值对参数的名称必须是编译时常量。

Codegen.myknnsearch3.-  args.{编码器.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)
验证evex3 =逻辑1

也可以看看

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

相关话题