- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 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/
作为脚本的输出,我有 numpy masked array和标准numpy array .如何在运行脚本时轻松检查数组是否为掩码(具有 data 、 mask 属性)? 最佳答案 您可以通过 isin
我的问题 假设我有 a = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8]), np.arra
numpy 是否有用于矩阵模幂运算的内置实现? (正如 user2357112 所指出的,我实际上是在寻找元素明智的模块化减少) 对常规数字进行模幂运算的一种方法是使用平方求幂 (https://en
我已经在 Numpy 中实现了这个梯度下降: def gradientDescent(X, y, theta, alpha, iterations): m = len(y) for i
我有一个使用 Numpy 在 CentOS7 上运行的项目。 问题是安装此依赖项需要花费大量时间。 因此,我尝试 yum install pip install 之前的 numpy 库它。 所以我跑:
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
numpy.random.seed(7) 在不同的机器学习和数据分析教程中,我看到这个种子集有不同的数字。选择特定的种子编号真的有区别吗?或者任何数字都可以吗?选择种子数的目标是相同实验的可重复性。
我需要读取存储在内存映射文件中的巨大 numpy 数组的部分内容,处理数据并对数组的另一部分重复。整个 numpy 数组占用大约 50 GB,我的机器有 8 GB RAM。 我最初使用 numpy.m
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
似乎 numpy.empty() 可以做的任何事情都可以使用 numpy.ndarray() 轻松完成,例如: >>> np.empty(shape=(2, 2), dtype=np.dtype('d
我在大型 numpy 数组中有许多不同的形式,我想使用 numpy 和 scipy 计算它们之间的边到边欧氏距离。 注意:我进行了搜索,这与堆栈中之前的其他问题不同,因为我想获得数组中标记 block
我有一个大小为 (2x3) 的 numpy 对象数组。我们称之为M1。在M1中有6个numpy数组。M1 给定行中的数组形状相同,但与 M1 任何其他行中的数组形状不同。 也就是说, M1 = [ [
如何使用爱因斯坦表示法编写以下点积? import numpy as np LHS = np.ones((5,20,2)) RHS = np.ones((20,2)) np.sum([ np.
假设我有 np.array of a = [0, 1, 1, 0, 0, 1] 和 b = [1, 1, 0, 0, 0, 1] 我想要一个新矩阵 c 使得如果 a[i] = 0 和 b[i] = 0
我有一个形状为 (32,5) 的 numpy 数组 batch。批处理的每个元素都包含一个 numpy 数组 batch_elem = [s,_,_,_,_] 其中 s = [img,val1,val
尝试为基于文本的多标签分类问题训练单层神经网络。 model= Sequential() model.add(Dense(20, input_dim=400, kernel_initializer='
首先是一个简单的例子 import numpy as np a = np.ones((2,2)) b = 2*np.ones((2,2)) c = 3*np.ones((2,2)) d = 4*np.
我正在尝试平均二维 numpy 数组。所以,我使用了 numpy.mean 但结果是空数组。 import numpy as np ws1 = np.array(ws1) ws1_I8 = np.ar
import numpy as np x = np.array([[1,2 ,3], [9,8,7]]) y = np.array([[2,1 ,0], [1,0,2]]) x[y] 预期输出: ar
我有两个数组 A (4000,4000),其中只有对角线填充了数据,而 B (4000,5) 填充了数据。有没有比 numpy.dot(a,b) 函数更快的方法来乘(点)这些数组? 到目前为止,我发现
我是一名优秀的程序员,十分优秀!