【问题标题】:how to use netcdf flag_meanings attribute in python如何在 python 中使用 netcdf flag_meanings 属性
【发布时间】:2017-06-21 02:16:38
【问题描述】:

我正在 python 中创建一个 netcdf 文件,并希望将“flag_values”和“flag_meanings”属性分配给其中一个变量。变量名是'cs',flag_values应该是(0,1),flag_meanings应该是('STRATIFORM', 'CONVECTIVE')。

为了在 python 中进行这些分配,我使用了:

cs.flag_values = numpy.array((0,1))
cs.flag_meanings = numpy.array(['STRATIFORM','CONVECTIVE'])

“flag_values”分配工作正常,但“flag_meanings”分配给了我两个输入值的串联字符串,我不知道如何让字符串成为单独的实体。这是输出文件中 ncdump 的一部分:

cs:flag_values = 0L, 1L ;
cs:flag_meanings = "STRATIFORMCONVECTIVE" ;

当我只是尝试创建一个字符串数组并打印它时,我没有问题:

>>> a = np.array(['STRATIFORM','CONVECTIVE'])
>>> print a
['STRATIFORM' 'CONVECTIVE']

那么秘诀是什么?

【问题讨论】:

  • 下面的问题不是关于编写字符串数组,而是关于如何正确编写flag_meanings 属性。也许修改标题和问题以反映这一点;这对于其他有相同问题或对编写字符串数组有真正疑问的人很有用。
  • 对于那些真正想要编写字符串数组的人,请使用np.array(["stratiform", "convective"], np.str),这将导致array(['stratiform', 'convective'], dtype='<U10')。注意:netcdf4-python 也接受 np.strstr 作为 Variable datatype,所以这不仅适用于属性。

标签: python netcdf


【解决方案1】:

根据CF-conventions (Section 3.5, “Flags”)flag_meanings 是一个字符串,其中含义由空格(空格)分隔:

flag_meanings 属性是一个字符串,它的值是一个由空白分隔的描述性单词或短语列表,每个标志值对应一个。每个单词或短语应由字母数字集中的字符和以下五个字符组成:'_'、'-'、'.'、'+'、'@'。如果使用多词短语来描述标志值,那么短语中的单词应该用下划线连接。

所以定义应该是

cs.flag_meaning = "convective stratiform"

【讨论】:

  • 谢谢大家。我想我现在有了。
  • @Stacy:请为有用的问题和 cmets 投票,并接受您认为正确的答案。 (这就是你感谢 StackOverflow 上的人的方式。)
  • 对不起。不知道协议。我发现 equaeghe 的最新回复起到了作用。谢谢。
  • @Stacy:没关系,但请点击我的答案旁边的复选标记和向上箭头。
  • 单击复选标记使其变为绿色,但是当我单击向上箭头时,它会迅速将下面的数字从 0 更改为 1,然后又变回 0。不知道该怎么做。
【解决方案2】:

我认为 netCDF4 仅支持字符串数组——创建文件时是否使用了正确的模块和正确的标志。您想使用 netcdf4-python 模块 (https://github.com/Unidata/netcdf4-python) 并且需要将文件创建为:

from netCDF4 import Dataset
nc = Dataset('test.nc', 'w', format='NETCDF4')

NETCDF4 应该是默认格式,但如果它被覆盖(或者如果您没有使用 netcdf4 库),我认为不支持字符串数组。

【讨论】:

  • 我正在使用 'import netCDF4' 并使用 format = 'NETCDF4' 参数创建 netcdf 文件,所以这不是问题。
【解决方案3】:

我知道这是一个旧帖子,但供将来参考。

试试,

cs.flag_meaning = "Convective, Stratiform"

【讨论】:

  • 含义只能用空格隔开,不能用逗号。看我的回答。
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 2013-11-15
  • 1970-01-01
  • 2013-06-12
相关资源
最近更新 更多