我将进行一系列实验。评估的主要方法具有以下特征:
[Model threshold] = detect(...
TrainNeg, TrainPos, nf, nT, factors, ...
removeEachStage, applyEstEachStage, removeFeatures);
其中removeEachStage
,applyEstEachStage
和removeFeatures
是布尔值。你可以看到,如果我颠倒任何这些布尔参数的顺序,我可能会得到错误的结果。
MATLAB中是否有一种方法可以更好地组织,以最大限度地减少这种错误?或者,我可以使用任何工具来保护我免受这些错误的影响吗?
答案 0 :(得分:6)
具有结构的组织
您可以输入具有这些参数的struct
字段。
例如具有字段
的结构setts.TrainNeg
.TrainPos
.nf
.nT
.factors
.removeEachStage
.applyEstEachStage
.removeFeatures
这样,当你设置字段时,它很清楚字段是什么,不像函数调用,你必须记住参数的顺序。
然后你的函数调用变为
[Model threshold] = detect(setts);
,你的函数定义类似于
function [model, threshold] = detect(setts)
然后简单地替换例如param
setts.param
[Model threshold] = detect(in1, in2, setts);
。
混合方法
如果您愿意,也可以将此方法与当前方法混合使用,例如
in1
如果您仍想明确包含in2
和setts
,请将其余内容捆绑到detect
。
OOP方法
另一个选择是将检测变成一个类。这样做的好处是,classdef detect()
properties
TrainNeg = [];
TrainPos = [];
nf = [];
nT = [];
factors = [];
removeEachStage = [];
applyEstEachStage = [];
removeFeatures =[];
end
methods
function run(self)
% Put the old detect code in here, use e.g. self.TrainNeg to access member variables (aka properties)
end
end
对象将具有固定名称的成员变量,而不是结构,如果您在设置字段时输入错误,则只需创建带有拼写错误名称的新字段。
例如
{{1}}