Crear funcion con matriz struct

Jacqueline Hidalgo
26 de Octubre del 2017
Hola a todos!! necesito de su ayuda.. Estoy intentando crear una función para crear perfiles verticales de temperatura. El problema que tengo es para extraer las variables que necesito (x ejemplo: temperatura, presion). La matriz que contiene tales variables tiene un formato extructura, cuyo tamaño es 814. Dentro de ella están las variables presión y temperatura que a su vez están en matrices... el asunto es que estoy haciendo un ciclo que me extraiga tales matrices, pero no se que estoy haciendo mal que me extrae la ultima matriz que vendría a ser el dato de la matriz principal (814).. además los tamaños de las matrices de las variables no son iguales... si alguien me puede ayudar a como resolver dicho problema estaré super agradecida.. saludos

Sara
12 de Agosto del 2026

Si la matriz es un array de structs (lo que en MATLAB se suele llamar "struct array", tamaño 814x1 donde cada elemento tiene sus propios campos), no necesitas ningún bucle para sacar cada variable como vector. MATLAB permite extraer un campo de todos los elementos del struct array de golpe usando la notación de punto seguida de corchetes:

temperatura = [datos.temperatura]; % vector 1x814 con todas las temperaturas
presion = [datos.presion]; % vector 1x814 con todas las presiones

Esto funciona porque datos.temperatura (sin corchetes) genera una "comma-separated list" con el valor de ese campo en cada elemento del struct array, y los corchetes [ ] los concatenan automáticamente en un vector. Es el equivalente vectorizado de hacer:

temperatura = zeros(1, length(datos));
for i = 1:length(datos)
  temperatura(i) = datos(i).temperatura;
end

pero sin el bucle, y bastante más rápido para 814 elementos. Un detalle importante: esto solo funciona directo si cada campo contiene un escalar. Si datos(i).temperatura fuera a su vez un vector de tamaño variable entre elementos, la concatenación con [ ] puede dar un vector con una forma que no esperas, y ahí sí conviene usar arrayfun con 'UniformOutput', false para quedarte con un cell array en vez de intentar concatenar directamente.

Sara