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

问题描述:

假设我有一个名为I的大小为n * 1的结构,其中多个字段之一例如称为“区域”。当我尝试下面的代码:如何在Matlab中提取n * 1结构的特定字段中的所有值

area = I.area 

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

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

使用简单的[]周围的结构将导致所有值的横向拼接。如果您想要将它们沿另一个维度连接起来,则可以使用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}; 
+0

感谢您的回答! – jingweimo

area = [I.area] 

I.area回报I(1).area所有值,I(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 
+0

它的工作原理,如果区域字段具有在每个位置的一个值,例如I(1) .area = 1.如果条目有两个值I(1).area = [1,2],该怎么办?是否有可能提取这些值,就像它们被构造为矩阵而不是整形成一列或一行。例如: – jingweimo

+0

如果I(1).area = [1,2],I(2).area = [3,4],我想输出是[1,2; 3,4]。 – jingweimo

+0

如果您的意图是解决“区域”是2x1向量的情况,请下次在您的问题中明确说出,以便回答者不必猜测您的真实含义。而这条线的面积(ii)= I(ii).area;'强烈表明'I.area'是一个标量,无论如何,一个矢量'area'可以很容易地用'reshape'来处理。我编辑了我的答案以反映这一点。 –