0

这是另一个帮助我的 stackoverflow 参与者的解决方案。数据来自 csv 文件:

    States Damage Blizzards

    Indiana 1      3
    Alabama 2      3
    Ohio    3      2
    Alabama 4      2


%// Parse CSV file
[States, Damage, Blizzards] = textread(csvfilename, '%s %d %d', ...
    'delimiter', ',', 'headerlines', 1);

%// Parse data and store in an array of structs
[U, ix, iu] = unique(States);        %// Find unique state names
S = struct('state', U);              %// Create a struct for each state
for k = 1:numel(U)
    idx = (iu == k);                 %// Indices of rows matching current state
    S(k).damage = Damage(idx);       %// Add damage information
    S(k).blizzards = Blizzards(idx); %// Add blizards information
end

在 MATLAB 中,我需要在循环中创建一系列赋值变量 (A1,A2,A3)。所以我的结构 S 有 3 个字段:状态、龙卷风、飓风。

现在我尝试使用这种方法来分配 A1 =,A2 =,但我得到了一个错误,因为它不适用于结构:

   for n = 1:numel(S)
   eval(sprintf('A%d = [1:n]',S(n).states));
   end

输出目标是循环中分配给结构字段的一系列变量:

  A1 = 2 3
  A2 = 2 3
  A3 = 4 5
4

1 回答 1

1

我不是 100% 确定我理解你的问题。
但也许你正在寻找这样的东西:

for n = 1:numel(S)
   eval(sprintf('A%d = [S(n).damage S(n).blizzards]',n));
end

顺便说一句,使用evalc而不是eval将抑制命令行输出。

稍微解释一下,为什么

eval(sprintf('A%d = [1:n]',S(n).state));  

不起作用:

S(1).state  

返回

ans = 
   Alabama

这是一个字符串。然而,

A%d

需要一个数字(有关数字格式,请参阅此内容)。
此外,

numel(S) 

产量

ans = 
   3

所以,

eval(sprintf('A%d = [1:n]',n));

将简单地返回以下输出:

A1 =

 1

A2 =

 1     2

A3 =

 1     2     3  

因此,您希望n作为变量名的计数器,但在其他结构字段(damageblizzards)中组合条目的向量,再次n用作计数器。

于 2013-05-09T20:59:11.517 回答