对非索引变量使用计数器并将它们放入数组中

时间:2014-11-27 18:15:17

标签: arrays matlab matrix cell

我在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 

但它没有用。

2 个答案:

答案 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