MATLAB Experiment Manager 如何传入高维函数输入?
数据小许
结论
可以通过初始化函数准备矩阵等高维数据,再用参数表中的标量参数选择要使用的数据。根据 MATLAB 的 Experiment Manager 文档,参数表中的参数值可以是标量或向量,向量用于列出待扫描的候选值。因此,矩阵通常不能直接作为单个参数候选值传入。
文档还说明,初始化函数可以返回结构数组,实验函数可通过 params.InitializationFunctionOutput 访问其输出。对于普通 MATLAB 代码实验,可以把矩阵放在结构数组的字段中,再用标量索引选取相应元素。Experiment Manager 文档
用初始化函数保存矩阵候选项
例如,要比较两个矩阵,可以创建一个初始化函数:
function data = initData()
data(1).X = [1 2; 3 4];
data(2).X = [5 6; 7 8];
end
在 Experiment Manager 中,将初始化函数设为 initData,并添加一个标量参数 caseIndex,候选值设为 1:2。实验函数随后按索引取出矩阵:
function output = func(params)
data = params.InitializationFunctionOutput;
X = data(params.caseIndex).X;
output = sum(X, "all");
end
每次 trial 都会使用一个 caseIndex 值,从初始化函数返回的结构数组中选取对应矩阵。如果每组实验数据包含多个矩阵或其他变量,也可以将它们放在同一个结构数组元素的不同字段中。
数据较大时
如果数据不适合直接写在初始化函数里,可以将数据放在实验所需的支持文件中,再由初始化函数读取并返回实验函数所需的数据。参数表仍用于选择实验条件或数据索引,矩阵则由初始化函数准备。
如果矩阵候选项很多,也可以让标量参数表示文件名编号或数据集编号,再由初始化函数或实验函数根据编号读取相应数据。具体读取方式取决于数据的存储和组织方式。
注意事项
- 初始化函数应返回标量或结构数组;上例将矩阵放在结构数组字段中。
- 参数表中的索引值需要对应结构数组中的有效元素。
- 参数表中的向量表示候选值集合,不会作为一个不可拆分的矩阵候选值传给实验函数。
- 参数数据类型和功能可能随 MATLAB 版本变化;请以当前安装版本的 Experiment Manager 界面和对应版本文档为准。
备注:内容仅供参考。
