python - 如何使从 netCDF (.nc) 加载的数组可写?

标签 python arrays numpy io netcdf

我正在使用 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/

相关文章:

python - Python 中的并发文件访问

python - 如何将轮盘赌轮背景图像添加到 matplotlib 雷达图

java - 多类项目中的空数组在调用时接收数据后返回 null

python - numpy中这些数组形状之间的区别

python - 如何在 Pandas DataFrame 上编写条件数组操作

python - 将 2012-12-19 字符串转换为 Python 中的日期时间对象

python - “TimedeltaProperties”对象没有属性 'strftime'

java - 如何设置Object[]的长度

javascript - 使用 JavaScript 显示数组元素

python - 将字符串列转换为整数