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.

Módulo python netCDF4 – cómo obtener la clave netCDF4.default_fillvals para un dtype arbitrario de numpy?

Quiero registrar explícitamente el atributo de valor faltante para las variables en un archivo netCDF que estoy escribiendo con el módulo netCDF4. Soy consciente de que puedo lograr esto configurando explícitamente el argumento fillvalue en netCDF4.createVariable, y que netCDF4.defaultfillvals proporciona los valores predeterminados. Hasta aquí todo bien. ¿Existe una forma confiable de obtener la clave del diccionario para default_fillvals de netCDF4 a partir de una matriz numpy arbitraria? Las claves de default_fillvals son [‘i1’, ‘u1’, … ‘i8’, ‘f8’], etc., y los dtypes de numpy son diferentes y potencialmente bastante complejos.

Por supuesto, puedo crear mi propio diccionario de mapeo, pero sospecho que podría perder algunas posibilidades, así que me pregunto si netCDF4 proporciona una mejor forma.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hasta donde yo sé, no existe una función incorporada en el módulo netCDF4 que te permita obtener directamente la clave del diccionario para netCDF4.default_fillvals a partir de un arreglo numpy arbitrario. Sin embargo, puedes crear tu propio diccionario de mapeo que cubra todos los posibles dtypes de numpy que puedas encontrar.

    Aquí tienes un ejemplo de cómo podrías crear dicho diccionario:

    import numpy as np
    import netCDF4
    
    fillval_dict = {
        np.dtype('int8'): netCDF4.default_fillvals['i1'],
        np.dtype('uint8'): netCDF4.default_fillvals['u1'],
        np.dtype('int16'): netCDF4.default_fillvals['i2'],
        np.dtype('uint16'): netCDF4.default_fillvals['u2'],
        np.dtype('int32'): netCDF4.default_fillvals['i4'],
        np.dtype('uint32'): netCDF4.default_fillvals['u4'],
        np.dtype('int64'): netCDF4.default_fillvals['i8'],
        np.dtype('uint64'): netCDF4.default_fillvals['u8'],
        np.dtype('float32'): netCDF4.default_fillvals['f4'],
        np.dtype('float64'): netCDF4.default_fillvals['f8']
    }
    

    Luego puedes utilizar este diccionario para obtener el valor de relleno correspondiente para cualquier dtype de numpy:

    # Ejemplo de variable con dtype int32
    var_dtype = np.dtype('int32')
    var_fill_value = fillval_dict[var_dtype]
    

    Ten en cuenta que este diccionario de mapeo solo cubre los dtypes básicos de numpy. Si encuentras dtypes más complejos, es posible que necesites agregar entradas adicionales al diccionario o manejarlos por separado.

Comments are closed.