【问题标题】:Matlab: Series of Variables in a LoopMatlab:循环中的一系列变量
【发布时间】:2013-05-09 19:33:50
【问题描述】:

这是另一个帮助我的 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

【问题讨论】:

  • 我不确定这是否是“Matlab 方式”,正如 here 所解释的那样@
  • @user1608954 为什么需要一堆不同名称的变量?为什么不在结构中为此创建另一个字段,或者至少使用cell arrays
  • 好吧,我正在生成一个不同的变量名称,以便绘制不同的变量。 Schorsch,这是一个结构: S = struct('Texas', 0, 'Kansas', 1, 'Maryland', 2)
  • 我会的。给我一分钟。
  • 我已经发布了整个代码。

标签: matlab variables loops


【解决方案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

需要一个数字(请参阅 this 了解数字格式)。
此外,

numel(S) 

产量

ans = 
   3

因此,

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

将简单地返回以下输出:

A1 =

 1

A2 =

 1     2

A3 =

 1     2     3  

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

【讨论】:

  • 就是这样。谢谢,肖尔施。我一直在处理类似的事情,但无法完成。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2023-03-29
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多