MATLAB: Determinación de la longitud / tamaño total de una matriz de estructura de campos como matrices de estructura

StackOverflow https://stackoverflow.com/questions/1757250

Pregunta

Tengo una matriz de estructura que contiene campos como matrices de estructura de longitud variable. Por ejemplo:

's' es una estructura 'Datos' es un campo en 's', y también una matriz misma estructura y

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

Quiero asignar previamente una matriz que tiene una marca de tiempo de cada s.data.timestamp campo. ¿Hay una manera de hacer esto sin necesidad de utilizar un bucle dos veces? Esto es lo que tengo hasta ahora:

% 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

pensé simplemente sobreestimar la longitud que necesitaría basado en la longitud de 's' y una longitud media de 'datos', pero la longitud real de cada campo '' de datos / subestructura es muy variable. ¿Sería mejor simplemente sobreestimar los demonios fuera de ella y el recorte de la matriz resultante después? Cero marcas de tiempo son imposibles con el conjunto de datos que estoy trabajando, por lo que no debería ser un problema.

¿Fue útil?

Solución

Esto funcionará si cada estructura matriz data tiene los mismos campos y son vectores fila (es decir, 1-por-N ):

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

Si las matrices de estructura data son vectores de columna (es decir, N-por-1 ), es necesario utilizar vertcat lugar:

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

Las soluciones anteriores funcionan debido al hecho de que el acceso a un único campo de una matriz de estructura devuelve un separada por comas lista .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top