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.

Promedio estacional con ncra –mro solo seleccionando el valor del primer registro.

Tengo archivos con datos mensuales solo para septiembre, octubre y noviembre (filtrados en un paso anterior) y quiero calcular promedios estacionales (un valor para cada trimestre de cada año). Estoy utilizando ncra --mro -d time,,,3,3 (promedio en la dimensión de los registros, desde el inicio hasta el final, saltando cada tres registros y cada subciclo tiene 3 registros) pero el resultado no es un promedio de los tres meses, sino solo el valor de septiembre.

Puedo confirmar esto utilizando ncks -d time,,,3 para seleccionar solo el primer mes de cada año (en mi caso, septiembre) y cuando leo ambos resultados utilizando una herramienta externa, son exactamente iguales.

Aquí están los comandos que ejecuté junto con comentarios sobre los resultados. Todos los archivos se pueden encontrar aquí.

# Intenta hacer un promedio estacional desde el archivo original
# Obtiene:
# ncra: ADVERTENCIA El argumento Subciclo solo es compatible para la dimensión de registro en las operaciones ncra y ncrcat
ncra --mro -d time,,,3,3 original.nc4 average.nc4

# Seleccionar solo el primer mes de la temporada
ncks -d time,,,3 original.nc4 sampled.nc4

# Cuando leo ambos archivos (usando una herramienta externa) veo que ambos archivos son idénticos. Es decir, 
# el primer comando en realidad no calculó un promedio, solo seleccionó el primer valor
# de cada temporada.

# Quizás esto está relacionado con la advertencia sobre la dimensión de registro. 
# De acuerdo, supongo que debemos asegurarnos de que time sea una dimensión de registro.
ncks --mk_rec_dmn time original.nc4 record.nc4

# Y ahora intenta calcular el promedio estacional nuevamente
ncra --mro -d time,,,3,3 record.nc4 record_average.nc4

# Ahora este nuevo archivo es demasiado pequeño (77kb vs 928kb) y no puedo leerlo con ninguna herramienta

ncks --version devuelve:
NCO netCDF Operators versión “4.6.3” construido por buildd en binet el 23 de diciembre de 2016 a las 22:34:40
ncks versión “4.6.3”

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el comando original ncra --mro -d time,,,3,3 original.nc4 average.nc4 en realidad no calculó el promedio estacional, sino que seleccionó solo el primer valor de cada estación. Esto se confirma al compararlo con el resultado de ncks -d time,,,3 original.nc4 sampled.nc4, que selecciona solo los valores de septiembre.

    Para resolver esto, intentaste asegurarte de que el tiempo sea una dimensión de registro usando el comando ncks --mk_rec_dmn time original.nc4 record.nc4, pero el archivo resultante record_average.nc4 era demasiado pequeño y no se podía leer con ninguna herramienta.

    Una posible solución sería reorganizar los datos de manera que los tres meses de cada estación caigan dentro del mismo registro (dimensión) antes de calcular el promedio. Esto se puede hacer utilizando el comando ncpdq de la siguiente manera:

    ncpdq -a time,record original.nc4 rearranged.nc4
    ncra -d time,0,,3 rearranged.nc4 seasonal_average.nc4
    

    El primer comando -a time,record reorganiza los datos de manera que el tiempo sea una dimensión de registro, y el archivo resultante rearranged.nc4 tiene tres registros de tiempo para cada estación. El segundo comando -d time,0,,3 calcula el promedio en cada tercer registro a partir del primer registro, lo que efectivamente promedia los tres meses de cada estación.

    Puedes verificar que el archivo resultante seasonal_average.nc4 tiene los promedios estacionales deseados al compararlo con el resultado de seleccionar solo los valores de septiembre utilizando ncks -d time,,,3 original.nc4, por ejemplo.

Comments are closed.