Почему маскированные данные netCDF, загруженные в массивы Python, вызывают проблемы со сверткой astropy Box2DKernel?

При попытке применить сверточные фильтры Astropy к замаскированному двумерному полю чисел, прочитанному из файла netCDF, я столкнулся с двумя странными вещами.

  • Передача замаскированного массива по умолчанию, созданного из ввода-вывода netCDF4, вызывает ошибку в функции свертки astropy.
TypeError                                 Traceback (most recent call last)
<ipython-input-16-6aeef1d2166f> in <module>()
      3 from astropy.convolution import Box2DKernel
      4 b2dk=Box2DKernel(9)
----> 5 sstC=ap_convolve(sstReg,b2dk)

/nfs/.../decorators.py
in convolve(array, kernel, boundary, fill_value, nan_treatment,
normalize_kernel, mask, preserve_nan, normalization_zero_tol)
    825             name = func.__name__
    826
--> 827         func = make_function_with_signature(func, name=name, **wrapped_args)
    828         func = functools.update_wrapper(func, wrapped, assigned=assigned,
    829                                         updated=updated)

/nfs/.../decorators.py
in wrapper(data, *args, **kwargs)
    243                                   AstropyUserWarning)
    244
--> 245             result = func(data, *args, **kwargs)
    246
    247             if unpack and repack:

/nfs/.../convolve.py
in convolve(array, kernel, boundary, fill_value, nan_treatment,
normalize_kernel, mask, preserve_nan, normalization_zero_tol)
    167         # because none of what follows modifies array_internal.
    168         array_dtype = array.dtype
--> 169         array_internal = array.astype(float, copy=False)
    170     else:
    171         raise TypeError("array should be a list or a Numpy array")

TypeError: astype() got an unexpected keyword argument 'copy'
  • #P2#
    #P3#
    #P4#
    #P5#
    #P6#

person Chris Hill    schedule 19.07.2018    source источник
comment
Что делает import numpy; numpy.__version__ show? И какая версия Astropy?   -  person Iguananaut    schedule 20.07.2018
comment
Версии для были: numpy.__version__ =› '1.14.2', astropy.__version__ =› '3.0.2'.   -  person Chris Hill    schedule 22.07.2018
comment
Это похоже на законную ошибку. Не могли бы вы сообщить об этом на github.com/astropy/astropy/issues/new с ссылка на этот вопрос?   -  person Iguananaut    schedule 23.07.2018


Ответы (1)


Способ исправить эти проблемы состоит в том, чтобы преобразовать замаскированный массив, используя

numpy.ma.filled()

с float('nan') в качестве значения маски, например.

phi2=numpy.ma.filled(phi,float('nan'))

. Это создает массив phi2, который не маскируется. Это предотвращает возникновение ошибки копирования. Использование nan в свертке приводит к соответствующей корректировке операции свертки. Без nan значение маски будет свернуто с реальными данными — обычно это не то, что вам нужно!

person Chris Hill    schedule 19.07.2018