使用字符串中的名称创建变量

Pot*_*ito 17 string variables matlab variable-names

让我们假设我想创建10个变量,如下所示:

x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
Run Code Online (Sandbox Code Playgroud)

这是我打算做的简化版本.基本上我只想通过以自动方式创建这些变量来保存代码行.是否有可能在Matlab中构造变量名?我的例子中的模式是["x", num2str(i)].但是我找不到用这个名字创建变量的方法.

Dan*_*Dan 28

你可以用eval来做,但你真的不应该这样做

eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended
Run Code Online (Sandbox Code Playgroud)

而是使用单元格数组:

x{i} = i
Run Code Online (Sandbox Code Playgroud)

  • 我真的不鼓励你使用eval在工作区中弹出增量变量.如果你想要一个名字来创建一个结构:`s.(sprintf('x%d',i))= i;` (13认同)
  • @CharlieParker它使您的代码难以阅读(只是比较我的两个解决方案),并迫使您再次使用`eval`来遍历变量,这不必要地很复杂。它使您的代码很难调试,并增加了更多的错误空间。考虑一下如何在两个解决方案中找到最大的“ x”,作为使用“ eval”会变得多么复杂的一个例子!此外,它还会使您不需要的所有变量杂乱无章。这就是数组的作用!这是一种草率的,懒惰的方式,您的代码表明您没有花时间进行适当的计划。 (2认同)

bde*_*caf 5

我还强烈建议在这种情况下使用单元格数组或结构体.我认为它甚至会给你一些性能提升.

如果你真的需要这样做,丹告诉了如何.但我还想指出这个genvarname功能.它将确保您的字符串是有效的变量名称.

编辑:genvarname是核心matlab的一部分,而不是统计工具箱的一部分