【问题标题】:How to extract all the values from a specific field of a n*1 structure in Matlab如何从Matlab中n * 1结构的特定字段中提取所有值
【发布时间】:2016-09-24 03:02:59
【问题描述】:

假设我有一个名为 I 的结构,大小为 n*1,具有多个字段,例如,其中一个字段称为“区域”。当我尝试下面的代码时:

area = I.area

结果区域只有一个来自结构最后位置的值。是否有任何快速的方法来精确字段中的所有值,除了使用 for 循环如下:

for ii = 1:n; area(ii) = I(ii).area; end

【问题讨论】:

    标签: matlab structure matlab-struct


    【解决方案1】:

    在结构周围使用简单的[] 将导致所有值的水平连接。如果您想将它们沿另一个维度连接起来,您可以使用cat 明确指定它。这将使您能够更好地处理可能包含多个值的字段。

    % Concatenate them along the first dimension
    out = cat(1, I.area);
    
    % Concatenate them along the third dimension
    out = cat(2, I.area);
    

    或者,如果字段都是不同的维度,则将它们转换为cell

    out = {I.area};
    

    【讨论】:

    • 感谢您的回答!!
    【解决方案2】:
    area = [I.area]
    

    I.area 以逗号分隔列表的形式返回 I(1).areaI(2).area ... 的所有值,该列表可以插入到任何需要此类列表的位置,例如函数参数列表或数组初始化。

    编辑:如果所有I(i).area 都是大小相等的行向量。然后你可以先水平连接它们,然后再整形到所需的尺寸:

    area =  reshape([I.area], [2 length(I)])'
    

    结果:

    >> I.area
    
    ans =
    
         3     4
    
    
    ans =
    
         5     6
    
    
    ans =
    
         7     8
    
    >> reshape([I.area], [2 length(I)])'
    
    ans =
    
         3     4
         5     6
         7     8
    

    【讨论】:

    • 如果 area 字段在每个位置都有一个值,例如 I(1).area = 1 ,如果条目有两个值怎么办 I(1).area = [1, 2 ]?是否可以像将这些值构造为矩阵而不是成形为列或行一样提取这些值。例如:
    • 如果 I(1).area = [1, 2], I(2).area = [3, 4],我希望输出是 [1, 2; 3, 4]。
    • 如果您的目的是解决 area 是 2x1 向量的情况,请下次在您的问题中明确说明,以便回答者不必猜测您的真正意思。而这条线area(ii) = I(ii).area; 强烈建议I.area 是一个标量,无论如何,一个向量area 可以很容易地用reshape 处理。我已经编辑了我的答案以反映这一点。
    猜你喜欢
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多