循环有关工作区名称

1视图(30天)
Cyrill比勒
Cyrill比勒 2016年12月14日
编辑: Guillaume 2016年12月14日
大家好
我有许多条目在我的工作区,假设USApopulation, GBRpopulation ESPpopulation…等几个国家和时期。
我如何写一个循环一般情况?
例如,假设我想每个系列人口除以2:
CountryNames = [“美国”“GBR”“特别是”];
i =[1:长度(CountryNames)];
ReducedCountryPopulation(我:)= (CountryNames{我}'人口']/ 2;
结束;
非常感谢! !:)

接受的答案

Guillaume
Guillaume 2016年12月14日
编辑:Guillaume 2016年12月14日
路要走在回答自己的问题,而不是给别人一个机会来提供不同的选择!
这是完全错误的方法!你现在有吨 eval 在代码中,使其缓慢(的内容 eval 不能通过matlab优化),很难调试(mlint不能突出中的错误吗 eval ,你不能通过 eval 代码)和比它需要更复杂
得更好 会改变你的方式存储你的数据。 不嵌入元数据 在一个变量的名字。为每个国家,而不是一个独立的变量使用一个变量,一个索引来访问每个国家。两个简单的选择: containers.Map 。示例使用地图:
%,摆脱所有这些变量:
CountryNames = {“美国”;墨西哥人的;“特别是”};
CountryPopulation = containers.Map;
countryidx = 1:元素个数(CountryNames)
CountryPopulation (CountryNames {countryidx}) = eval ([CountryNames {countryidx},“人口”]);
结束
%计算比率国家人口
%不需要eval了
MeanRatioPopulation = containers.Map (CountryPopulation。钥匙,cellfun(@(流行)流行/ 2 CountryPopulation.values“UniformOutput”、假);

答案(1)

Cyrill比勒
Cyrill比勒 2016年12月14日
编辑:
我:
CountryNames = [“美国”;墨西哥人的;“特别是”];
i =[1:尺寸(CountryNames, 1)];
varName = [CountryNames(我,:)“人口”];
eval ([“mean_Ratio”varName“=”varName”)。/ 2;]);
结束

社区寻宝

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

开始狩猎!