【问题标题】:MATLAB: Is there a method to better organize functions for experiments?MATLAB:有没有一种方法可以更好地组织实验函数?
【发布时间】:2012-08-08 01:55:54
【问题描述】:

我将进行一组实验。评估的主要方法具有以下签名:

[Model threshold] = detect(...
    TrainNeg, TrainPos, nf, nT, factors, ...
    removeEachStage, applyEstEachStage, removeFeatures);

其中removeEachStageapplyEstEachStageremoveFeatures 是布尔值。您可以看到,如果我颠倒任何这些布尔参数的顺序,我可能会得到错误的结果。

MATLAB 中是否有一种方法可以更好地组织以最大限度地减少此类错误?或者有什么工具可以用来保护我免受这些错误的影响?

【问题讨论】:

标签: function matlab arguments function-parameter


【解决方案1】:

结构组织

您可以输入具有这些参数的struct 作为其字段。

例如带有字段的结构

setts.TrainNeg
     .TrainPos
     .nf
     .nT
     .factors
     .removeEachStage
     .applyEstEachStage
     .removeFeatures

这样,当你设置字段时,字段是什么就很清楚了,不像函数调用,你必须记住参数的顺序。

那么你的函数调用就变成了

[Model threshold] = detect(setts);

你的函数定义会是这样的

function [model, threshold] = detect(setts)

然后简单地替换出现的例如paramsetts.param

混合方法

如果您愿意,也可以将此方法与您当前的方法混合使用,例如

[Model threshold] = detect(in1, in2, setts);

如果您仍想明确包含in1in2,并将其余部分捆绑到setts

OOP 方法

另一种选择是将检测变成一个类。这样做的好处是 detect 对象将具有具有固定名称的成员变量,而不是在结构中,如果您在设置字段时打错字,您只需使用拼写错误的名称创建一个新字段。

例如

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

【讨论】:

  • 感谢您的回答!非常清楚。我发现通过 OOP 的解决方案非常有趣。另外,我认为添加的amount of overhead 并没有太大区别。
猜你喜欢
  • 2011-09-19
  • 2012-07-09
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 2020-03-10
  • 2021-06-27
相关资源
最近更新 更多