es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Bucle de datos de MatLab

Tengo este código para convertir datos NetCDF en una tabla ASCII. Lo simplificaré de esta manera:

lat = 1:193
lon = 1:361

whole_bin = 1:69673
chl = ncread(nombreArchivoIN, ‘CHL1mean’);

for x = 1:length(whole_bin)
for y = 1:361
for z = 1:193
data(:,1) = lon(y);
data(:,2) = lat(z);
data(:,3) = chl(y,z);
end
end
end

El problema es que este código me devuelve solo una parte de la tabla supuesta:

En otras palabras, esta tabla solo tiene una latitud y todas las longitudes. Lo que realmente necesito es tener el mismo resultado para cada latitud. Por lo tanto, en lugar de 361 filas, debería ser 69673, que es el tamaño de “whole_bin” en este ejemplo.

1 2 1.27927434444428
2 2 1.38863492012024
3 2 1.38863253593445
4 2 1.38863253593445
5 2 1.38197994232178
6 2 1.21169304847717
7 2 1.21169281005859
8 2 1.21169281005859
9 2 1.21169281005859
10 2 1.18449604511261
11 2 1.18139111995697

1 3 1.27927434444428
2 3 1.38863492012024
3 3 1.38863253593445
4 3 1.38863253593445
5 3 1.38197994232178
6 3 1.21169304847717
7 3 1.21169281005859
8 3 1.21169281005859
9 3 1.21169281005859
10 3 1.18449604511261
11 3 1.18139111995697

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, es necesario mover la asignación de data fuera del bucle más interno. El código actual establece los mismos valores para data en cada iteración de los bucles internos, sobrescribiendo los valores anteriores. Aquí está el código modificado:

    lat = 1:193;
    lon = 1:361;
    
    whole_bin = 1:69673;
    chl = ncread(filenameIN, 'CHL1_mean');
    
    data = zeros(length(whole_bin), 3); % preasignar la tabla de resultados
    i = 0; % configurar un contador para las filas de la tabla
    
    for y = 1:361
        for z = 1:193
            i = i + 1;
            data(i,1) = lon(y);
            data(i,2) = lat(z);
            data(i,3) = chl(y,z);
        end
    end
    

    De esta manera, la matriz data se inicializa con el tamaño correcto y los bucles internos recorren todas las combinaciones de y y z. La salida se escribe en data fila por fila utilizando el contador i para indexar las filas.

Comments are closed.