常见问题:如何创建变量A1, A2,…在一个循环中,A10吗?

1.678视图(30天)
1月
1月 2012年12月26日
编辑: Stephen23 2020年1月1日
我如何创建变量A1, A2,…在一个循环中,A10吗?
6个评论
1月
1月 2019年3月15日
(从旗帜) 亚历山大THIBEAULT 在斯蒂芬的评论中写道:
“cmon,我们不会阅读所有的内容的所有页面…我们正在寻找解决方案。”金宝搏官方网站
@Alexandre:你找到解决方案,当你金宝搏官方网站向下滚动并阅读答案。斯蒂芬的详尽的解释需要经过数以百计的讨论在过去的年。

登录置评。

接受的答案

1月
1月 2012年12月26日
编辑:1月 2017年4月24日
请不要这样做! 你会发现MATLAB数组(数字或细胞)会让你做同样的事情在一个更快,更可读的方式。例如,如果通过A10包含标量A1,使用:
A = 0 (10);%没有必要,只是快得多
i = 1:10
(我)=%一些方程
结束
现在引用(我)只要你说人工智能。每个Ai包含一个向量或矩阵,每一个都有不同的大小,您想要使用细胞阵列,这是正确的为:
i = 1:10
{我}= 1:我;
结束
注意,每个{我}包含一个不同大小的矩阵。和小心使用花括号下标!
你又想吃的另一种方法是使用结构,而不是细胞阵列。的字段结构可以是你想要的变量名。你可以用动态索引字段的引用。例如:
名称= {“弗雷德”“山姆”“基地”};
印第安纳州= 1:长度(名称)
年代。(名字{印第安纳})=魔法(长度(名字{印第安纳}));
结束
在这种情况下,你最终得到的变量,一个结构,包含字段指定的字符串存储在单元阵列的名字。
现在,如果你还想创建变量与动态生成的名称,您需要使用EVAL。使用EVAL,您使用MATLAB命令生成字符串,将你要执行的操作。例如,eval(= 10)有同样的效果= 10,和eval ([' A ' B ' = 10 ']) AB = 10有同样的效果,只有eval方法执行慢得多。所以在一个循环中,您可以使用:
i = 1:10
eval (sprintf (' % d =(1:我)”,我));
结束
这是注意更加混淆。此外,这可能会导致代码难以排除的问题,特别是如果你想动态创建一个变量具有相同名称的函数:
函数y = mysin (x)
eval (“罪= 5;”);
y = sin (x);
调用这个函数以“y = mysin(1)“不会返回y = 5(罪恶的第一个元素变量由EVAL),它将返回1的正弦,因为解析函数时没有变量命名罪和罪的用法在最后一行是解析函数调用内置的罪。事实上,一个名为罪存在的变量在运行时是无关紧要的;“决定”parsetime优先。
重复一遍:不要使用EVAL创建在运行时变量,除非你有一个非常好的理由,比如有人给你一个垫文件名叫A1428 2000变量,例如。即使在这种情况下,你可以避免EVAL:
%承担MAT-file例二。垫包含2000个变量,通过A2000 A1
S =负载(“example1.mat”);
与2000年% S现在是一个结构体数组字段,S。通过S.A2000 A1。
%访问A1428,使用:
x1 = S.A1428;
%如果变量的“指数”你想访问存储在一个变量:
k = 1428;
x2 = s (sprintf (“% d '、k));
x3 = s ([“一个”,num2str (k)]);
1评论
爱德华·拜尔斯
爱德华·拜尔斯 2016年7月19日
你好,有一个很好的方式来存储多个迭代LinearModel对象?即使用索引符号,便于循环并调用特定的实例,我已经尝试:
mdl {x} = fitlm(资源描述,modelspec);
但这并不工作,如:“作业使用FitObject()是不允许的。”

登录置评。

更多的答案(2)

罗伯特·卡明
罗伯特·卡明 2014年9月10日
编辑:罗伯特·卡明 2014年9月10日
我100%同意1月 动态创建新的变量 应该避免 ,但如果你必须请考虑这个替代方法:
函数generateVariableOnFly
%让tic和toc比较使用eval和assignin
抽搐
eval (“= 0 (10,10);”)
toc
另一种方法是使用一个百分比
%的子函数调用方分配var功能:
抽搐
variableCreator (“b”0 (10,10))
toc
a和b %验证存在,都是一样的:
isequal (a, b)
结束
%使用子函数分配变量在调用函数:
函数variableCreator (newVar变量)
assignin (“来电”、newVar变量);
结束
完成Jans例子你可以用在以下方式:
2 = 1:10
variableCreator (sprintf (%我的(二),(二)
结束
这将创建变量A1, A2 ....A10。
3评论
Stephen23
Stephen23 2020年1月1日
编辑:Stephen23 2020年1月1日
@ Oussama himani HAYANE :使用索引。索引更简单和更有效的比你正在试图做的是:
(5)= 8;
(5)= 19;
索引是很好入门教程:
有特殊原因需要编写这样的慢,复杂,混淆代码?

登录置评。


社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的