Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用字符串中的名称创建变量_String_Matlab_Variables_Variable Names - Fatal编程技术网

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

String 使用字符串中的名称创建变量,string,matlab,variables,variable-names,String,Matlab,Variables,Variable Names,假设我想创建10个变量,如下所示: x1 = 1; x2 = 2; x3 = 3; x4 = 4; . . xi = i; 这是我打算做的一个简化版本。基本上我只想通过自动创建这些变量来保存代码行。是否有可能在Matlab中构造变量名?我的示例中的模式是[x,num2stri]。但是我找不到一种方法来创建一个具有该名称的变量 你可以用它来做,但你真的不应该这样做 而是使用单元阵列: x{i} = i 我还强烈建议在这种情况下使用单元格数组或结构。我认为它甚至会给你一些性能提升 如果你真的需要

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

x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
这是我打算做的一个简化版本。基本上我只想通过自动创建这些变量来保存代码行。是否有可能在Matlab中构造变量名?我的示例中的模式是[x,num2stri]。但是我找不到一种方法来创建一个具有该名称的变量

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

而是使用单元阵列:

x{i} = i

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

如果你真的需要这样做,丹告诉你怎么做。但我还想指出genvarname函数。它将确保您的字符串是有效的变量名


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

如果其他人感兴趣,Dan回答的正确语法是:

eval(['x', num2str(i), ' = ', num2str(i)]);

我的问题已经包含了错误的语法,所以这是我的错

我需要这样的东西,因为如果您想在模拟过程中更改结构或单元数组,就不能从Simulink块的工作区中引用它们

不管怎样,对我来说这是最好的

assignin('base',['string' 'parts'],values);

虽然早该如此,但我只是想补充另一个答案

genvarname函数正好适用于这些情况

如果与tmp结构数组一起使用,则不需要eval cmd

这个链接中的示例4是如何做到这一点

祝你一切顺利


eyal

哇,谢谢,非常简单。是的,我将使用细胞,但也使用你在这里介绍的方法;我真的不鼓励您使用eval在工作区中弹出增量变量。如果需要名称,请创建一个结构:s.sprintf'x%d',i=i;为什么不建议这样做?@CharlieParker这会让你的代码很难阅读——只需比较我的两个解决方案,并迫使你再次使用eval来迭代变量,这是不必要的复杂。这使得您的代码很难调试,并增加了更多的出错空间。考虑一下如何在两个解决方案中找到最大的x,作为一个例子,说明如果使用eval,它将是多么复杂!而且,它会让你的工作空间中充斥着你不需要的变量。这就是阵列存在的目的!这是一种草率、懒惰的方式,代码表明您没有花时间进行正确的计划。@CharlieParker eval也相当慢,因为优化器不知道它将要做什么。谢谢。我将使用数组而不是单元格。我的问题中的例子非常简单,以便对我正在寻找的信息提出一个简单的问题。我实际上所做的并不像我的问题那么天真:p@bdecaf:顺便说一句,genvarname是core MATLABoh my bad的一部分。我可以发誓这是工具箱的一部分。将来,如果有像这样的小错误,你可以编辑我的答案。底部有一个编辑链接。如果你没有足够的声誉,你也可以留下评论,其他人会为你编辑。我现在已经修好了;参见MATLAB常见问题解答:建议将“base”更改为“caller”。这样的话,AIUI,它应该适用于任何没有人特别关注工作空间的地方。
assignin('base',['string' 'parts'],values);
for k=1:10
   assignin('base', ['x' num2str(k)], k)
end
 for k = 1:5
   t = clock;
   pause(uint8(rand * 10));
   v = genvarname('time_elapsed', who);
   eval([v ' = etime(clock,t)'])
   end