【问题标题】:Matlab- How does you name a new variable based on other variables' values? [duplicate]Matlab-您如何根据其他变量的值命名新变量? [复制]
【发布时间】:2010-10-07 18:37:12
【问题描述】:

可能的重复:
How to concatenate a number to a variable name in MATLAB?
MATLAB: How can I use a variables value in another variables name?

我想使用函数中给定的其他变量的值来命名变量。 因此,如果我有 x1,x2 的值,我可以将新变量的名称设为:

x_(x1 的值)_(x2 的值) 作为名称。

我已经检查了 eval、num2str、strcat 函数,但到目前为止我还做不到,所以我有一个上面名字的变量,我可以给它赋值。

任何帮助将不胜感激。

【问题讨论】:

标签: variables matlab naming naming-conventions


【解决方案1】:

查看以下常见问题解答:

它回答了您问题的“如何”部分,并推荐了使用数组的更好方法。

【讨论】:

  • 我不想使用数组。
  • @max:你有充分的理由不使用数组,还是一心只想使用糟糕的解决方案?
【解决方案2】:

作为Jonas suggests,如果x1x2 是数字,则可行:

x1 = 3;
x2 = 4;
newValue = 25;

eval(sprintf('x_%i_%i = newValue;',x1,x2));

如果x1x2 是字符串,则变为:

x1 = 'foo';
x2 = 'bar';
newValue = 25;

eval(sprintf('x_%s_%s = newValue;',x1,x2));

或更简单(使用连接而不是 SPRINTF):

x1 = 'foo';
x2 = 'bar';
newValue = 25;

eval(['x_' x1 '_' x2 ' = newValue']);

我不知道您要完成什么,但这可能不是最好的方法。 EVAL should always be avoided. 在使用 EVAL 中创建变量是(又名“poofing”)是双重错误。

如果您尝试将参数与值关联,structures 是一个更好的解决方案:

x1 = 'foo';
x2 = 'bar';
newValue = 25;

x.([x1 '_' x2]) = newValue;

【讨论】:

    【解决方案3】:

    假设您有充分的理由想要这样做(并假设 x1 和 x2 具有整数值),您可以通过组合 EVALSPRINTF 来做到这一点。

    x1 = 3;
    x2 = 4;
    newValue = 25;
    eval(sprintf('x_%i_%i = newValue;',x1,x2));
    

    如果 x1 和 x2 是浮点数,这会更棘手,因为变量名中不能包含点,但只要将点替换为其他内容,它仍然是可能的。

    但是,我真的要问:您确定要这样做吗?因为目前我无法想象一个应用程序会想要创建你事先不知道的变量名,这反过来又使得编写一个高效的程序变得非常困难。

    编辑

    有许多有用的方法可以将数据存储在数组中。如果您真的不希望这样,您可能有兴趣通过 MAP 中的键/值对访问数据,该功能在最新版本的 Matlab 中可用。因此,您的密钥将变为sprintf('%i_%i',x1,x2),相应的值将是您想要存储的任何值。

    【讨论】:

      【解决方案4】:

      您还可以使用动态字段引用。 Mathworks 的 Loren 在这里写了一篇文章:

      Mathworks: use-dynamic-field-references

      【讨论】:

        猜你喜欢
        • 2022-08-15
        • 2020-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-15
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多