繁体   English   中英

为什么将netCDF屏蔽的数据加载到Python数组中会导致错误的Box2DKernel卷积问题?

[英]Why does netCDF masked data loaded into Python arrays cause problems with astropy Box2DKernel convolution?

当尝试将熵卷积滤波器应用于从netCDF文件读取的数字的掩码二维字段时,我遇到了两种奇怪的行为

  • 传递从netCDF4 I / O创建的默认掩码数组会触发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' 
  • 使用numpy.where将掩码数组转换为常规的Numpy数组

    phi2 = np.where(phi,phi,phi)

    修复了复制错误,但随后的输出

    sstC = ap_convolve(sstReg,b2dk)

    有奇怪的价值。

解决这些问题的一种方法是使用以下命令转换掩码数组

numpy.ma.filled()

float('nan')作为掩码值,例如

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

这将产生未屏蔽的数组phi2 这样可以防止发生复制错误。 卷积中使用nan会导致卷积运算适当调整。 没有nan,掩码值将与实际数据进行卷积-通常这不是您想要的!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM