我正在使用 python scipy.io.netcdf
模块从 netcdf (.nc
) 文件加载一些变量。在我加载它们的文件中,缺失数据的填充值为 99999,我想将其从 numpy 更改为 np.nan
。
一旦我导入了一个变量并将其分配给一个 numpy 数组,我就无法清理 99999 个填充值,因为我得到:
RuntimeError: array is not writeable
我尝试将数组 writeable
的属性更改为 True
但返回:
ValueError: cannot set WRITEABLE flag to True of this array
所以我很茫然。下面是我的代码的简化版本和几个示例输出。这里有人有什么建议吗?最初我使用的是 netCDF4 而不是 scipy.io.netcdf 在这种情况下我会设置 nc.set_auto_mask(False) 但我没有在 scipy.io 中没有看到类似的属性,所以我把它省略了。
示例代码:
import scipy.io as sio
import numpy as np
nc = sio.netcdf.netcdf_file('filename.nc','r') # open file
arr = nc.variables['PARAMETER'][:] # load into np array
output_arr = cleanarr(arr) # replace filler 99999 vals with np.nan
nc.close()
值得注意的是,如果我在 cleanarr(arr)
之前或之后执行 nc.close()
似乎并不重要
输出示例:
type(arr)
<type 'numpy.ndarray'>
arr.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : False
ALIGNED : True
UPDATEIFCOPY : False
最佳答案
来自文档
http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.io.netcdf.netcdf_file.html
NetCDF files, when opened read-only, return arrays that refer directly to memory-mapped data on disk:
>>>
>>> data = time[:]
>>> data.base.base
<mmap.mmap object at 0x7fe753763180>
If the data is to be processed after the file is closed, it needs to be copied to main memory:
>>>
>>> data = time[:].copy()
>>> f.close()
>>> data.mean()
我认为这在之前的问题中也得到了解决,尽管我没有花时间去查找这些问题。
关于python - 如何使从 netCDF (.nc) 加载的数组可写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602996/