我在Matlab有20个城市。
city1='arad'
...
city20='neamt'
我的问题是,如何使用计数器作为' i'呼叫我的城市并将它们全部放在一个数组中。
我试过这些:
function [city,neighbor,list]=m()
main; //referred to my cities name in main.m
for i=1:20 //i used a loop
city=cityi // what i whises is city1...city20
list=[city]// i want all cities in an array!
end
但它没有用。
答案 0 :(得分:3)
如果要避免使用eval
,可以将所有在其开头city
的工作区变量保存到临时.mat
文件中,然后重新加载{{ 1}}文件通过将其内容存储到变量中。此变量基本上是一个结构,其中每个字段都是根据您从工作区保存的变量命名的。加载此结构后,可以使用struct2cell
将每个结构字段转换为单元数组中的单独条目。正如Kamtal在他的帖子中所指出的那样,建议你将所有这些放在一个单元格数组中,特别是因为每个城市的长度将根据变量而变化。
当您加载.mat
文件时,结构字段的排序方式应按数字排序,因此我们不必担心订购任何内容。如果您真的担心,请考虑使用orderfields
确保字段按数字排序....但我非常确定这不会成为问题。
最终结果将是包含所有城市的单元格数组。完成此.mat
文件后,您可以将其从计算机中删除。
假设您只想在工作区中保存以.mat
开头的变量名称(即city
),请尝试执行以下操作:
city1, ..., city20
save('data.mat', 'city*'); %// Save the variables to a MAT file
data = load('data.mat'); %// Load them back into a structure that contains fields corresponding to the variable names
cellArray = struct2cell(data); %// Convert structure to cell array
delete('data.mat'); %// Delete the temporary file
将包含从1到20索引的所有城市。因此,如果您想访问特定城市,只需执行以下操作:
cellArray
city = cellArray{idx};
是您要访问的城市ID。因此,如果您想访问idx
,请执行:
city15
答案 1 :(得分:0)
您应该将它们放在cell
for i = 1 : 20
eval(['A{',num2str(i),'} = city',num2str(i)]);
end
我没有看到其他选择,只能使用eval
。