python - 如何使用 Python 连接多个 netCDF 文件中的数据

标签 python arrays numpy append netcdf

我有一些 netCDF 文件,每个方向有 24 个(xyz),还有 24 个包含不同时间的值。最后一点,我必须绘制所有时间步长的数据。

对于绘图,我需要在特定点进行插值,因此我必须知道最近的邻居。我的计划是将数据划分为 3D 单元,这样我就不必搜索整个数据集中的最近邻居。

因此,在第一步中,我读取数据文件并创建一个数组,其中包含[x,y,z,v[:]]每个点的坐标以及每次的值.

之后,我计算每个点所属的单元格并将其 append 到 4 维数组:xyzv:

for vec in vecs:
    x_ind = int((vec[0]-xmin) / stepWidthX) 
    y_ind = int((vec[1]-ymin) / stepWidthY) 
    z_ind = int((vec[2]-zmin) / stepWidthZ) 

    if x_ind==gridPointsInXdirection:
        x_ind = x_ind-1
    if y_ind==gridPointsInYdirection:
        y_ind = y_ind-1
    if z_ind==gridPointsInZdirection:
        z_ind = z_ind-1
    #print z_ind, y_ind,x_ind

    XGridPoints[z_ind, y_ind, x_ind] = np.append(XGridPoints[z_ind, y_ind, x_ind], vec[0])
    YGridPoints[z_ind, y_ind, x_ind] = np.append(YGridPoints[z_ind, y_ind, x_ind], vec[1])
    ZGridPoints[z_ind, y_ind, x_ind] = np.append(ZGridPoints[z_ind, y_ind, x_ind], vec[2])
    VGridPoints[z_ind, y_ind, x_ind] = np.append(VGridPoints[z_ind, y_ind, x_ind], vec[3])

其中vecs是包含所有数据点的数组。到目前为止它可以工作,但我现在的问题是在 VGridPoints 中:我有一个很长的值列表,而不是数组列表。是否有解决方案将数组 append 到数组元素,以便我稍后可以访问它,例如:

x = XGridPoints[2,3,4][2]
y = YGridPoints[2,3,4][2]
z = ZGridPoints[2,3,4][2]
v[:] = VGridPoints[2,3,4][2]

当我只采取一个时间步长时,它可以工作,但如果我重新计算每个时间步长的单元格和最近的邻居,并且它们不会随着时间的推移改变位置,我就会有很大的超速。

最佳答案

如果您先验知道您将使用的数组的形状,那么 Numpy 通常会更方便。诸如 append 到数组之类的事情会遭受性能损失。我同意塞巴斯蒂安的观点,最简单的方法(如果可能的话)是创建一个足够大的数组来容纳所有东西(最坏的情况)。如果这是不可能的,那么也许您可以尝试使用对象数组。例如,创建一个具有 3 个空间维度的对象数组:

import numpy as N
XGridPoints = N.empty((nx, ny, nz), dtype='object')

(对于 YGridPointsZGridPointsVGridPoints 也是如此。)然后您可以设置 XGridPoints[z_ind, y_ind, x_ind] 到 numpy 数组并根据需要 append 到该数组。

关于python - 如何使用 Python 连接多个 netCDF 文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144887/

相关文章:

python - pytest从不同的测试文件独立导入同一模块

python - 如何在Python中存储数据?

python - 圆形递归地在嵌套字典中 float

python - 就速度和内存而言,迭代非常大的循环并将 scipy 稀疏矩阵存储到文件中的最有效方法

python - Tensorflow:类型错误:需要二进制或 unicode 字符串,得到 <tf.Tensor 'Placeholder:0' shape=<unknown> dtype=string>

Python从父静态方法调用子静态变量

java - json 格式的 hashmap 输出数组

Java 使用数组比 C++ 中的 std::vector 快 8 倍。我做错了什么?

c - 传递多维数组作为函数参数

python - 使用另一个数据帧的多索引过滤一个数据帧