如何从Matlab中的n * 1结构的特定字段中提取所有值

时间:2016-09-24 03:03:00

标签: matlab structure matlab-struct

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

area = I.area

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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};