当前位置: 首页 > 知识库问答 >
问题:

如何在netCDF中为现有变量添加新的维度?

弘承业
2023-03-14

代码是这个答案确实有效,增加了一个新的维度,但是它没有做我想要它做的事情。

为了进一步说明我的问题 - 我有以下定义时间(无限),纬度,经度,水平为四个维度和一个可变的位势高度。我想做的是在现有的可变地势高度中添加一个维度dimz_Z。

现在,上面代码中的答案是 netCDF 文件在 ncdump 中的样子

float hgt(time, level, lat, lon) 

但是dimz_Z维度不见了,如下所示,从nck的输出。

hgt dimension 0: time, size = 1 NC_DOUBLE, chunksize = 1 (Record coordinate is time)
hgt dimension 1: level, size = 1 NC_FLOAT, chunksize = 1 (Coordinate is level)
hgt dimension 2: lat, size = 23 NC_FLOAT, chunksize = 23 (Coordinate is lat)
hgt dimension 3: lon, size = 21 NC_FLOAT, chunksize = 21 (Coordinate is lon)

它确实出现在定义中,但作为一个独立的维度,而不是hgt维度的一部分

 dimz_Z: type NC_FLOAT, 1 dimension, 0 attributes, compressed? no, chunked? no, packed? no
 dimz_Z size (RAM) = 483*sizeof(NC_FLOAT) = 483*4 = 1932 bytes
 dimz_Z dimension 0: dimz_Z, size = 483 NC_FLOAT (Coordinate is dimz_Z)

这是文件的输出

time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 hgt[0]=53 m
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 hgt[1]=55 m

我想要的是以下内容

time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 dimz_Z[0]=0 hgt[0]=53 m
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 dimz_Z[0]=0 hgt[1]=55 m

一位朋友告诉我,我不能将此维度添加到现有变量中。相反,在 fortran 中,我必须将变量 hgt 重新定义为五维变量,并重新输入值。这是正确的还是有替代方案?我正在使用Fortran 77 netcdf API。

共有1个答案

林念
2023-03-14

你的朋友是对的。然而,您仍然可以考虑一些选项。在编程方面,几乎总是有选择的。

  1. 从初始文件创建一个新的netcdf文件,并在新文件中定义您的变量以具有额外的维度。您可以在fortran中执行此操作
  2. 使用netcdf处理工具(nco)创建一个具有所需属性的新变量并删除另一个。
 类似资料:
  • 我有一个 netcdf 数据文件,其中包含以下变量,显示在下面的 ncdump 代码段中: 我正在尝试从此文件中消除时间坐标变量,以便获得三维 netcdf 数据文件。基本上在netcdf文件中第一次拥有数据数据值,仅此而已。我试图用 ncks 完成此操作,这就是他们在进行谷歌搜索时显示我应该做的事情。我用 ncks 尝试了以下命令: 但我无法删除时间维度。我应该怎么做才能调整此命令以获得仅显示初

  • 我需要一些处理NetCDF文件的帮助。我总共有10个文件,分别用于10年。每年都有多个(相同的)变量,其中一些还涵盖每日值。在这里,我向您展示了一个结构示例: 我需要将数据作为模型的输入进行处理。我需要从10个NetCDF文件中提取的变量是SMB变量,它只是每个网格单元的年度值。所以我想构建一个如下形式的NetCDF: 我知道 ncks 命令已经只提取 SMB 变量,但我无法一次将其应用于多个文件

  • 我有一个netCDF文件。ncdump: 是否有 nco 命令可以将 int/float 的所有变量和维度转换为双精度? 我发现了这个: 然而,这一次只能处理一个变量,我的文件中有大约30个变量

  • 我正在使用改装库,我想从OpenWeatherPi获取天气预报。 我有这个。

  • 我正在表任务中添加新列名标题。但我得到一个错误,该表中不存在此列。谁能帮我解决那个错误。这是我的密码: 然后添加此代码 到创建的新表文件

  • 我正在学习JAVA。如果我想在列表中添加一些变量。我知道的是这样的: 如果我有很多变量呢。例如,从a到z,我是否需要像这样手动添加它? 因为我声明了100个变量,需要将它们添加到列表中。我们有其他方法可以更聪明地添加它们吗?Eclipse或Intellij中有热键吗? 感谢您的帮助。