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

时间:2009-11-18 16:28:33

标签: arrays matlab memory-management matlab-struct

我有一个结构数组,其中包含不同长度的结构数组。例如:

's'是一个结构 'data'是'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”的长度和“数据”的平均长度过高估计我需要的长度,但每个“数据”字段/子结构的实际长度变化很大。我是否会更好地过高估计它的结果并在之后修剪得到的数组?使用我正在使用的数据集时,零时间戳是不可能的,所以这应该不是问题。

1 个答案:

答案 0 :(得分:6)

如果每个结构数组data具有相同的字段并且是行向量(即 1-by-N ),这将起作用:

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

如果data结构数组是列向量(即 N-by-1 ),则需要使用vertcat代替:

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

上述解决方案的工作原因是访问结构数组的单个字段会返回comma-separated list