【问题标题】:How to Dynamically Create Variables in MATLAB [duplicate]如何在 MATLAB 中动态创建变量
【发布时间】:2015-04-23 02:48:26
【问题描述】:

我想操作变量名称。 (就像在 PHP 中使用 ${} 创建动态变量一样)。例如:

我想创建 N 个变量,名称为 A_N:

for i = 1:N
  A_i = 'new variable!';
end

结果是:

A_1
A_2
...
A_N

【问题讨论】:

  • 如果你澄清你有什么样的变量,或者你打算如何使用它,我可以进一步澄清我的答案。
  • 我的回答对你不起作用还是我应该澄清一下?

标签: matlab


【解决方案1】:

如果您想以编程方式创建变量(不是推荐的做法,但如果您坚持),请参阅上一个问题:A way to dynamically create variables in Matlab?

正如我所说,这样做很麻烦,至少您可能希望将内容存储在一个结构中,这允许使用字符串变量以编程方式创建元素,并使用 paren 语法进行动态引用。例如,在您的示例中,您可以使用:

N = 5;
for i = 1:N
    fieldname = sprintf('A_%i', i);
    s.(fieldname) = 'new variable!';
end

如果您随后显示结构s,您将看到:

>> s
s = 
A_1: 'new variable!'
A_2: 'new variable!'
A_3: 'new variable!'
A_4: 'new variable!'
A_5: 'new variable!'

【讨论】:

  • 这是非常繁琐的启动和使用。使用我的方法会容易得多,除非有一个非常具体的理由不这样做(我无法想象为什么会有)。
  • 同意,一般来说动态名称几乎肯定是个坏主意。但如果你想要它们,你就想要它们。没有考虑到我们在设计程序时的疯狂想法。
  • 关于动态变量创建的可怕警告已添加到答案中。动态结构引用有其自身的危险,但它比动态变量创建更清楚。可以在访问之前测试字段是否存在,这是创建字符串/值存储系统的一种非常方便的方法。它可以非常优雅和有用。
  • @krisdestruction - 因为我可以将真实变量名与某些东西相关联。对于元胞数组,您必须使用数字索引。虽然有时数字变量是值得的,但我需要将实际变量名称与某些东西相关联。
  • @krisdestruction - 哦不,哈哈。真的只是一种偏好。这里没有其他魔法盒或仙尘。我也为您的答案 +1,因为这是一种有效的方法。
【解决方案2】:

我不了解动态变量,但普遍接受的方式 来存储没有结构的动态内容是使用单元格而不是新的变量名称。您可以在单元格的每个元素中存储任何类型。您甚至可以在单元格中存储单元格!您将使用下面的代码。

A = cell(i,1);
for i = 1:N
    A{i} = 'new variable!';
end

然后您可以使用以下方式访问“动态变量”:

A{1}

如果您正在寻找更复杂的结构,您也可以考虑结构。澄清一下,这不是@Tony 所描述的结构方法,而是内置的structured array

【讨论】:

    【解决方案3】:

    您可以使用函数 eval 实现变量的动态创建,但这不是一个好习惯。正如其他人指出的那样,我强烈鼓励使用细胞或结构。但如果这是你所追求的:

    for i=1:N
        eval(sprintf('A_%d = %d',i,i));
    end
    

    这将创建 A_1 = 1、A_2 = 2 等等。

    【讨论】:

    • 我通常不会对eval 的答案进行投票,但由于您透露这不是好的做法,我决定破例。 +1。
    • 谢谢。我通常也不会提出 eval 的解决方案,但这是我能想到的最接近 php 中的 ${} 的东西
    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 2017-07-30
    • 2011-02-23
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2018-05-01
    相关资源
    最近更新 更多