MATLAB:确定结构数组的结构数组的总长度/大小作为结构数组的字段

问题描述:

我有一个结构数组,其中包含各种长度的结构数组。例如: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”和“数据”的平均长度的长度的长度,但每个的实际长度“数据'领域/子结构差异很大。我是否会过得更好,过高地估计它后面的数据并修剪所得数组?使用我正在处理的数据集时,零时间戳是不可能的,所以这应该不成问题。

这将工作,如果每一个结构阵列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