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

Python netCDF:从地理区域创建离散坐标变量

吕子真
2023-03-14

我希望创建一个netCDF4文件,area_nc,与时间的维度和离散的字母数字区号,例如'A0','A1','A2','B0'等,不适合常规网格(而不是纬度/经度)。

NetCDF气候和预测(CF)元数据公约pdf建议,这可以在第4.5节中完成,但我找不到任何示例。

有办法做到这一点吗?

到目前为止,我已经尝试过:

import netCDF4 as nc

area_nc = nc.Dataset('area.nc', 'w')

area_nc.createDimension('time', None)
area_nc.createDimension('nhood', 6)

time = area_nc.createVariable('time', int, ('time'))
nhood = area_nc.createVariable('nhood', str, ('nhood'))

in_temp = area_nc.createVariable('in_temp', int, ('time', 'nhood'))

nhood[:] = ['A0', 'A1', 'A2', 'B0', 'B1', 'B2']

但是我得到错误:

IndexError: data can only be assigned to VLEN variables using integer indices

实现这一点,然后我想使用此代码作为参考将数据添加到文件中,而不是整数切片,例如:

area_nc.variables['in_temp'][0, 'A0'] = 23

谢谢!

共有1个答案

田德馨
2023-03-14

问题的第一部分,错误:错误表明python认为您的维度是可变长度(VLEN)。解决方案在于更好地定义维度。一个解决方案是更改您的两行:

nhood = area_nc.createVariable('nhood', str, ('nhood')) ->
nhood = area_nc.createVariable('nhood', '<U13', ('nhood'))

nhood[:] = ['A0', 'A1', 'A2', 'B0', 'B1', 'B2'] ->
nhood[:] = np.array(['A0', 'A1', 'A2', 'B0', 'B1', 'B2'])

不幸的是,你的最后一句话仍然行不通。我可以想到以下解决方法:

def int_area(area):
    import numpy as np
    return np.where(np.array(['A0', 'A1', 'A2', 'B0', 'B1', 'B2'])==area)[0][0]
area_nc.variables['in_temp'][0, int_area('A0')] = 23
 类似资料:
  • 我正在做一个蛇游戏,当苹果在屏幕上随机繁殖时,它不应该在蛇里面繁殖。我试着为苹果寻找一个新的地方,当它们被放在蛇里面时,我会: 这不是一个好的解决方案,所以我正在寻找一个新的解决方案,我可以创建无效的coordiantes,即蛇坐标和其余的有效坐标。所以我可以从有效坐标中随机化苹果的新位置。但我不知道该如何编码

  • 本文向大家介绍php两点地理坐标距离的计算方法,包括了php两点地理坐标距离的计算方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了php计算两点地理坐标距离的具体代码,供大家参考,具体内容如下 功能:根据圆周率和地球半径系数与两点坐标的经纬度,计算两点之间的球面距离。 获取两点坐标距离: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍java实现计算地理坐标之间的距离,包括了java实现计算地理坐标之间的距离的使用技巧和注意事项,需要的朋友参考一下 java实现计算两经纬度点之间的距离,直接上代码,具体解释请参考注释 以上就是本文的全部内容了,希望大家能够喜欢。

  • 问题内容: 我有一个包含地理数据的SQLite数据库。我的表是这样定义的: 接下来,我的软件(Java)使用一个简单的SQL请求来寻找GEO_OBJECTS,如下所示: 从GEO_OBJECTS中选择*纬度<= 123.4和纬度> = 26.32和经度<= 12.41和经度> = 6.23; 如果我在纬度和经度上创建索引,是否可以改善性能? 接下来,当我得到此查询的结果时,我正在使用Haversi

  • 我如何根据坐标创建谷歌地图链接。他们的新基本共享网址包含许多参数,例如- https://www.google.com/maps/place/Vetlanda,瑞典/@57.4217311,15.0849255,13z/data=!3m1!4b1!4m2!3m1!1s0x465758d912d321b5:0x55675191e550be84?hl=en 有什么想法吗?不希望嵌入,而只是创建可以共享

  • 我应该自己写方法吗?尽管我害怕不能解释一些事情,因为我的数学已经生疏了。或者我能为Java找到一个现成的实现吗?我有谷歌地图sdk在我的项目,但我找不到任何有用的东西。