【问题标题】:Changing variable names dynamically动态更改变量名
【发布时间】:2016-08-31 19:36:23
【问题描述】:

我有一个循环计算多个条件的平均值 (m)、标准差 (std) 和标准误差 (sem)。因为每个条件都有自己的mstdsem,我想相应地命名我的输出(它们应该是双格式)。例如:cond1_mcond1_stdcond1_semcond2_mcond2_stdcond2_sem

这是我尝试过的:

    cond={'cond1','cond2','cond3','cond4','cond5',...}
    for a=1:length(cond) 
        [strcat(cond{a},'_m'),strcat(cond{a},'_std'),strcat(cond{a},'_sem')]=compute_stats(M(:,a));
    end

注意:compute_stats 是输出mstdsem 的函数。 M 是包含我的数据的矩阵。问题是strcat 似乎不能作为更改输出名称的一种方式。例如,对于迭代 1,我的输出不是给我cond1_m,而是一个名为 strcat 的矩阵。

谁能帮忙?

【问题讨论】:

  • don't use eval in matlab。我建议使用具有动态字段名称的结构,语法为 condstruc.([num2str(a), '_m']) 等。

标签: matlab loops


【解决方案1】:

考虑使用非常适合您的目的的结构。顺便说一句,不要使用 cond 作为变量名。有一个名为cond 的函数可以计算矩阵的条件数。在这种情况下使用cond 会使这个功能黯然失色。您可以保留cond1cond2 等字段的原样:

con={'cond1','cond2','cond3','cond4','cond5',...};
result = struct();
for a=1:numel(con)
    [m, stdd, sem] = compute_stats(M(:,a));
    result.([con{a} '_m']) = m;
    result.([con{a} '_std']) = stdd;
    result.([con{a} '_sem']) = sem;
end

result 包含您想要的编译结果。然后,您将使用正确的字符串名称访问正确的矩阵。例如,如果您希望 std 输出第一个条件,请执行以下操作:

out = result.cond1_std;

【讨论】:

  • 谢谢。我确实尝试过使用结构,但坚持使用 strcat(即 result.(strcat(cond{a},'_m') 显然这不起作用。
  • @A.Rainer Ah :)。确保使用 [] 封装字符串,否则在结构中动态创建字段时它将不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多