我目前有一个正在批量运行的功能。它将结果输出到元胞数组。我想将元胞数组的每个输出导出到它们自己的变量。
因此我有一个变量 id 记录每一层的 ID。此过程可以手动进行,如下所示:
>> output =
[300x300x2 double] [300x300x2 double] [300x300x2 double]
>> [a1,a2,a3]=deal(output{:});
其中a后面的数字代表ID。是否可以自动执行此命令,以便用户可以设置前缀(在本例中为:a)并自动填写 id?比如,我可以按如下方式设置变量,并在 deal
命令中使用它们来命名我的新变量?
>> id =
1 2 3
>> prefix =
a
有什么想法吗?谢谢。
您可以将自己的自定义表达式构造为字符串,然后使用 eval()
(如果它在函数中并且您想返回,则使用 evalin()
)对其求值输出到您的工作区)。
function deal_output(output, id, prefix)
id = id(:);
vars = strcat(prefix, cellstr(num2str(id)))';
myexpr = ['[', sprintf('%s,', vars{1:end-1}), vars{end}, '] = deal(output{:})'];
evalin('caller', myexpr)
>> output = num2cell(1:3);
>> id = 1:3;
>> prefix = 'a';
>> deal_output(output, id, prefix)
a1 =
4
a2 =
5
a3 =
6
同时检查 FileExchange 上的 join.m
文件以避免丑陋的 sprintf
。
我是一名优秀的程序员,十分优秀!