最近邻搜索器的代码生成
对象的功能knnsearch
和rangesearch
最近邻搜索的对象,ExhaustiveSearcher
和KDTreeSearcher
,支金宝app持代码生成。这个例子展示了如何生成代码寻找最近邻使用穷举搜索对象在命令行。示例显示了两种不同的方式来生成代码,这取决于您使用对象的方式:通过使用加载对象loadLearnerForCoder
在一个入口点函数,并通过编译时常量对象生成的代码。
火车详尽的最近邻搜索器
加载费雪的虹膜数据集。
负载fisheriris
删除5虹膜随机预测的数据作为查询集。
rng (“默认”);%的再现性1)n =大小(量;%样本大小qIdx = randsample (n, 5);%查询数据的指标X =量(~ ismember (1: n, qIdx):);:Y =量(qIdx);
准备一份详尽的最近邻搜索者使用训练数据。指定“距离”
和“P”
名称-值对参数使用闵可夫斯基距离的指数1寻找最近的邻居。
Mdl = ExhaustiveSearcher (X,“距离”,闵可夫斯基的,“P”1);
找到训练数据的索引(X
),每个点的最近邻查询数据(Y
)。
Idx = knnsearch (Mdl Y);
使用生成代码saveLearnerForCoder
和loadLearnerForCoder
生成代码装载一个详尽的搜索器,以查询数据作为输入参数,然后找到最近的邻居。
将详尽的搜索器保存到一个文件使用saveLearnerForCoder
。
saveLearnerForCoder (Mdl“searcherModel”)
saveLearnerForCoder
保存模型,以MATLAB®二进制文件searcherModel.mat
作为一个结构数组在当前文件夹。
定义的入口点函数myknnsearch1
这需要查询数据作为输入参数。内的功能,通过使用加载搜索对象loadLearnerForCoder
,然后通过加载模型knnsearch
。
类型myknnsearch1.m%显示myknnsearch1内容。m文件
函数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])}
代码生成成功。
的更详细的示例,它使用生成代码saveLearnerForCoder
和loadLearnerForCoder
,请参阅机器学习模型的代码生成预测在命令行。关于指定适应可变参数的更多细节,请参阅为代码生成指定适应可变参数。
通过查询数据(Y
)来验证myknnsearch1
和墨西哥人文件返回相同的指标。
myIdx1 = myknnsearch1 (Y);myIdx1_mex = myknnsearch1_mex (Y);
比较myIdx1
和myIdx1_mex
通过使用isequal
。
verifyMEX1 = isequal (Idx myIdx1 myIdx1_mex)
verifyMEX1 =逻辑1
isequal
返回逻辑1 (真正的
如果所有的输入都是平等的。这种比较证实,myknnsearch1
和墨西哥人文件返回相同的结果。
生成代码与常量折叠模型对象
最近邻搜索对象可以是一个函数的输入参数定义为代码生成。的arg游戏
选择codegen
(MATLAB编码器)接受一个编译时常量搜索对象。
定义的入口点函数myknnsearch2
这需要一个详尽的搜索模型和查询数据的加载模型的输入参数,而不是功能。
类型myknnsearch2.m%显示myknnsearch2内容。m文件
函数idx = myknnsearch2 (Mdl, Y) % # codegen idx = knnsearch (Mdl Y);结束
生成代码的模型对象和查询数据,指定编译时常量使用模型对象coder.Constant
(MATLAB编码器),包括常数折叠的模型对象arg游戏
的价值codegen
。
codegenmyknnsearch2arg游戏{coder.Constant (Mdl)、coder.typeof (Y,[正无穷,4],[1,0])}
代码生成成功。
代码生成工作流与一个常数折叠模型对象是通用代码生成工作流。有关详细信息,请参见通用代码生成工作流。
验证myknnsearch2
和墨西哥人文件返回相同的结果。
myIdx2 = myknnsearch2 (Mdl Y);myIdx2_mex = myknnsearch2_mex (Mdl Y);verifyMEX2 = isequal (Idx myIdx2 myIdx2_mex)
verifyMEX2 =逻辑1
生成代码与名称-值对参数
定义的入口点函数myknnsearch3
这需要一个模型对象,查询数据,参数名称-值对。你可以通过指定允许可选名称参数变长度输入宗量作为输入参数。有关详细信息,请参见可变长度参数列表的代码生成(MATLAB编码器)。
类型myknnsearch3.m%显示myknnsearch3内容。m文件
函数idx = myknnsearch3 (Mdl Y变长度输入宗量)% # codegen idx = knnsearch (Mdl Y变长度输入宗量{:});结束
来生成代码,允许一个用户定义的闵可夫斯基距离指数,包括{coder.Constant (“P”), 0}
在arg游戏
的价值codegen
。使用coder.Constant
(MATLAB编码器)因为一个名称-值对参数的名称必须是一个编译时常量。
codegenmyknnsearch3arg游戏{coder.Constant (Mdl)、coder.typeof (Y,[正无穷,4],[1,0]),coder.Constant (“P”), 0}
代码生成成功。
验证myknnsearch3
和墨西哥人文件返回相同的结果。
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
另请参阅
codegen
(MATLAB编码器)|saveLearnerForCoder
|loadLearnerForCoder
|knnsearch
|rangesearch
|ExhaustiveSearcher
|KDTreeSearcher