【问题标题】:Extract data from NETCDF (.NC file) based on time根据时间从 NETCDF(.NC 文件)中提取数据
【发布时间】:2016-10-31 21:25:14
【问题描述】:

我目前正在从.NC 文件中提取数据以创建.cur 文件以供在GNOME 中使用。我在python中这样做

我提取了以下变量。

water_u(time, y, x)
water_v(time, y, x)
x(x): 
y(y): 
time(time): time
SEP(time, y, x)

cur 文件应包含以下内容:

[x][y][velocity x][velocity y]

这应该发生在每个时间变量存在的情况下。在这种情况下,我提取了 10 个时间数据,但我有成千上万的 [x][y] 和速度。

我的问题是如何根据时间变量提取速度?

import numpy as np 
from netCDF4 import Dataset 
volcgrp = Dataset('file_1.nc', 'r') 
var = volcgrp.variables['water_v'][:] 
print(var) 
newList = var.tolist() 
file = open('text.txt', 'w') 
file.write('%s\n' % newList) 
print("Done") 
volcgrp.close() 

【问题讨论】:

  • 您确实需要提供更多详细信息才能有机会回答您的问题。请展示您迄今为止尝试过的代码并描述它发生了什么(它会引发异常吗?如果是,请给出回溯)。您可能还需要提供数据示例,但如果您还不能解析文件(并且不能公开分享),这可能会有点困难。
  • @Blckknght 这是我迄今为止尝试的代码code import numpy as np from netCDF4 import Dataset volcgrp = Dataset('file_1.nc', 'r') var = volcgrp.variables[' water_v'][:] print(var) newList = var.tolist() file = open('text.txt', 'w') file.write('%s\n' % newList) print("Done") volcgrp.close() code 在这种情况下,我试图提取 water_v 并将其放在文本文件中。我的任务是创建一个文件,其中包含 row1 上的行,而 row 上的行分别来自 water_v 和 water_u。这需要针对 .NC 文件中的每个时间因素进行。这是否说明了一点?
  • 请把代码放在问题中,在那里你可以正确格式化(缩进在 Python 中很重要,所以格式化比平时更重要)。
  • @Blckknght 刚刚更新了我的问题。

标签: python variables extract netcdf


【解决方案1】:

这里的关键是读取water_uwater_v 的三个维度中的每一个,然后您可以沿其时间维度访问这些变量。

import netCDF4

ncfile = netCDF4.Dataset('file_1.nc', 'r') 
time = ncfile.variables['time'][:]  #1D
water_u = ncfile.variables['water_u'][:,:,:] #3D (time x lat x lon)
water_v = ncfile.variables['water_v'][:,:,:]

第一次访问此文件中每个网格点的数据:

water_u_first = water_u[0,:,:]

要将此 3D 数据存储到您在 cmets 中描述的文本文件中,您需要 (1) 循环遍历 time,(2) 访问 water_uwater_v,(3 ) 将这些 2D 数组展平为 1D,(4) 如果使用标准 file.write 技术则转换为字符串(例如,可以使用 Pandas to_csv 避免),以及 (5) 将 1D 数组写为文本中的行文件。

【讨论】:

  • 非常感谢您的详细解释!我会尝试并告诉你我的结果!再次感谢您
猜你喜欢
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多