python - 如何以与原始 NetCDF 浮点值相同的精度和比例将 NetCDF 变量 float 据读入 Numpy 数组?

标签 python numpy netcdf

我有一个 NetCDF 文件,其中包含一个具有浮点值的变量,精度/比例 == 7/2,即可能的值从 -99999.99 到 99999.99。

当我从 NetCDF 变量中取出一部分值并在我的调试器中查看它们时,我发现我现在数组中的值比我在原始 NetCDF 中看到的值具有更高的精度/比例。例如,当我查看 ToosUI/ncdump 查看器中的值时,它们显示为“-99999.99”或“12.45”,但当我查看切片数组中的值时,它们看起来像“-99999.9921875”(更大的刻度长度)。因此,如果我使用“-99999.99”作为预期值来指示缺失的数据点,那么我将无法与提取到切片数组中的内容进行匹配,因为这些值具有更大的刻度长度和额外的数字比例不仅仅是用于填充的零。

例如,如果我在 NetCDF 数据集中的某个点上执行 ncdump,我会看到:

Variable: precipitation(0:0:1, 40:40:1, 150:150:1)

float precipitation(time=1348, lat=180, lon=360);
  :units = "mm/month";
  :long_name = "precipitation totals";

 data:

  {
    {
      {-99999.99}
    }
  }

但是,如果我像这样从变量中获取一部分数据:

value = precipitationVariable[0:1:1, 40:41:1, 150:151:1]

然后我在我的调试器 (Eclipse/PyDev) 中看到它是这样的:

value == ndarray: [[[-99999.9921875]]]

因此,我读入 Numpy 数组的 NetCDF 数据集值似乎没有以与 NetCDF 文件中原始值相同的精度/比例读取。或许 NetCDF 中的值实际上与我在阅读时看到的相同,但由于 ncdump 程序本身的某些格式设置,通过 ncdump 向我显示的内容被截断了。

谁能告诉我这里发生了什么?预先感谢您的帮助。

顺便说一句,我正在 Windows XP 机器上使用 Python 2.7.3 开发此代码,并使用此处提供的 NetCDF4 API 的 Python 模块:https://code.google.com/p/netcdf4-python/

最佳答案

没有简单的方法来做你想做的事,因为 numpy 将值存储为单精度,所以它们总是有 0.99 之后的尾随数字。

但是,netCDF 已经提供了一种缺失数据的机制(参见 best practices guide)。 netCDF 文件最初是如何编写的? 缺失值special variable attribute应该用来指示那些缺失的值。在 C 和 Fortran 接口(interface)中,创建文件时,所有变量值都设置为缺失。如果您一次性编写了一个变量,则可以将 missing_value 属性设置为缺少值的索引数组。在 C 中查看有关填充值的更多信息和 Fortran接口(interface)。这是推荐的方法。 python netCDF4 模块可以很好地处理这些缺失值,并且此类数组在 numpy 中被读取为屏蔽数组。

如果您必须使用当前拥有的文件,那么我建议创建一个 mask 来覆盖缺失值周围的值:

import numpy as np
value = precipitationVariable[:]
mask = (value < -99999.98) & (value > -100000.00) 
value = np.ma.MaskedArray(value, mask=mask)

关于python - 如何以与原始 NetCDF 浮点值相同的精度和比例将 NetCDF 变量 float 据读入 Numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16845063/

相关文章:

Python scikit 学习 pca.explained_variance_ratio_cutoff

python - 我该如何解决以下代码中的过度拟合问题?

python - 如何在虚拟环境中运行shell-execute python脚本

python - 如何安排热图 pcolormesh 的数据?

python - 沿坐标列表给定的路径矢量化 haversine 距离计算

python - 使用纬度经度坐标从卫星图像获取最近的像素值

c# - 如何在c#项目中集成python库

python - 如何解决绘制函数时 Axes3D 错误?

python - 使用 Python,np.gradient 计算 u 和 v 的风散度

r - 从多变量 netCDF 文件创建光栅砖列表