2009-11-18 164 views
4

我有一個結構數組,其中包含各種長度的結構數組。例如:MATLAB:確定結構數組的結構數組的總長度/大小作爲結構數組的字段

「s」是結構 「數據」是在「S」的字段,並且也是一個結構陣列本身 和

length(s(n).data) ~= length(s(m).data) 

欲預分配一個數組,花費時間來自每個字段s.data.timestamp的郵票。 有沒有辦法做到這一點,而不使用for循環兩次?這是我到目前爲止有:

% find the total length 
count=0; 
for x=1:length(s) 
    count=count+length(s(x).data); 
end 
% preallocate timestamp array 
timestamp=zeros(1,count); 
% populate timestamp array 
index=1; 
for x=1:length(s) 
    for y=1:length(s(x).data) 
     timestamp(index)=s(x).data(y).timestamp; 
     index=index+1; 
    end 
end 

我想過只是高估了,我需要根據「S」和「數據」的平均長度的長度的長度,但每個的實際長度「數據'領域/子結構差異很大。我是否會過得更好,過高地估計它後面的數據並修剪所得數組?使用我正在處理的數據集時,零時間戳是不可能的,所以這應該不成問題。

回答

6

這將工作,如果每一個結構陣列data具有相同的字段,並且行向量(即1-通過-N):

allData = [s.data];    %# Concatenate all data arrays into one 
timestamp = [allData.timestamp]; %# Collect all the time stamps 

如果data結構陣列是列向量(即Ñ ×1),你需要使用vertcat代替:

allData = vertcat(s.data);  %# Concatenate all data arrays into one 
timestamp = [allData.timestamp]; %# Collect all the time stamps 

上述解決方案的工作,由於這樣的事實,訪問單個結構數組的字段返回comma-separated list

+1

哇!只有兩行 - 我相信「freakin'天才」這個詞可能適用於此。 – Doresoom 2009-11-18 19:47:17

+0

@doresoom:逗號分隔的列表是你的朋友。 ;) – gnovice 2009-11-18 19:56:15