2016-09-24 112 views
3

假設我有一個名爲I的大小爲n * 1的結構,其中多個字段之一例如稱爲「區域」。當我嘗試下面的代碼:如何在Matlab中提取n * 1結構的特定字段中的所有值

area = I.area 

結果區域只有一個值來自結構的最後一個位置。是否有確切除了使用循環領域中的所有值,如下任何快速的方法:

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

回答

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}; 
+0

感謝您的回答! – jingweimo

1
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'來處理。我編輯了我的答案以反映這一點。 –

相關問題