假設我有一個名爲I的大小爲n * 1的結構,其中多個字段之一例如稱爲「區域」。當我嘗試下面的代碼:如何在Matlab中提取n * 1結構的特定字段中的所有值
area = I.area
結果區域只有一個值來自結構的最後一個位置。是否有確切除了使用循環領域中的所有值,如下任何快速的方法:
for ii = 1:n; area(ii) = I(ii).area; end
假設我有一個名爲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};
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
它的工作原理,如果區域字段具有在每個位置的一個值,例如I(1) .area = 1.如果條目有兩個值I(1).area = [1,2],該怎麼辦?是否有可能提取這些值,就像它們被構造爲矩陣而不是整形成一列或一行。例如: – jingweimo
如果I(1).area = [1,2],I(2).area = [3,4],我想輸出是[1,2; 3,4]。 – jingweimo
如果您的意圖是解決「區域」是2x1向量的情況,請下次在您的問題中明確說出,以便回答者不必猜測您的真實含義。而這條線的面積(ii)= I(ii).area;'強烈表明'I.area'是一個標量,無論如何,一個矢量'area'可以很容易地用'reshape'來處理。我編輯了我的答案以反映這一點。 –
感謝您的回答! – jingweimo