4
\ begingroup美元

我想选择一个地区的地中海ETOPO1数据。

#深度测量法从netCDF4导入数据集数据=数据集(“ETOPO1_Bed_g_gdal.grd”、“r”)打印(data.variables.keys ()) # lon_range =数据获取数据。变量[' x_range '] [:] lat_range =数据。变量[' y_range '] [:] topo_range =数据。变量[' z_range '][:]间距=数据。变量=[“间距”][:]维度数据。变量(“维度”][:]z =数据。变量[' z '] [:] lon_num维度[0]= lat_num =维度[1]#准备数组lon_input = np.zeros (lon_num);lat_input = np.zeros (lat_num)我的范围(lon_num): lon_input[我]= lon_range [0] + i *间距[0]我的范围(lat_num): lat_input[我]= lat_range [0] + i *间距[1]#创建二维数组经度,纬度= np。meshgrid (lon_input lat_input) # 2 d数组从一维数组转换为z值威尼斯平底渔船= np。重塑(z (lat_num lon_num) #选择地区lon_idx_min = np.abs (lon_input - 12.6) .argmin () lon_idx_max = np.abs (lon_input - 13.4) .argmin () lat_idx_min = np.abs (lat_input - 43.8) .argmin () lat_idx_max = np.abs (lat_input - 44.2) .argmin() #威尼斯平底渔船获取数据(lon_idx_min: lon_idx_max lat_idx_min: lat_idx_max] . data

这将返回一个空数组:

> >阵列([],形状= (0,24),dtype = float64)

一个主要的问题:

1 -我做错了什么?当我检查经度纬度值我切片(lat_input [lat_idx_max]等)他们是有意义的。然而,lon_idx_max lon_idx_min高于len(威尼斯平底渔船)(11556 vs 10801和11604年)。我想这是问题,但我不能找到它的原因。

一个额外的问题:

2 -如果我为什么翻转经度和纬度给我一些数据吗?注意,数据没有意义(-4000米在亚得里亚海…)

\ endgroup美元
2
  • \ begingroup美元 嗨,x_range是从哪里来的,因为当我试图重建你的例子python不知道它对我来说 \ endgroup美元
    - - - - - -维斯
    2022年6月22日,星期日
  • \ begingroup美元 当我打印数控文件的变量,它是沿着y_range和z_range \ endgroup美元
    - - - - - -shamalaia
    2022年6月22日23点

1回答1

5
+ 50
\ begingroup美元

看起来你只是搞砸了你的顺序最小和最大的自由。你在错误的地方(-44°代替+ 44°)。

#深度测量法导入numpy np matplotlib导入。pyplot从netCDF4 plt导入数据集数据=数据集(“ETOPO1_Bed_g_gmt4.grd”、“r”) lon_range =数据。变量[' x_range '] [:] lat_range =数据。变量[' y_range '] [:] topo_range =数据。变量[' z_range '][:]间距=数据。变量=[“间距”][:]维度数据。变量(“维度”][:]z =数据。变量[' z '] [:] lon_num维度[0]= lat_num =维度[1]朗= np.linspace (lon_range [0], lon_range[1],维度[0])lat = np.linspace (lat_range [0], lat_range[1],维度[1])威尼斯平底渔船= np。重塑(z (lat_num lon_num) #选择地区lon_idx_min = np.abs (lon-10) .argmin() #我增加保证金lon_idx_max = np.abs (lon-20) .argmin() #更好地看到该地区lat_idx_min = np.abs (lat + 48) .argmin () lat_idx_max = np.abs (lat + 40) .argmin (plt)。imshow(威尼斯平底渔船[lat_idx_min: lat_idx_max lon_idx_min: lon_idx_max], vmax = 0)

通过使用np。linspace您可以删除的循环代码并明显加速。没有必要创建一个meshgrid纬度和经度。

\ endgroup美元
1
  • \ begingroup美元 问候的气象学家 \ endgroup美元
    - - - - - -Joscha Fregin
    2022年6月15日10点

你的答案

通过点击“发布你的答案”,你同意我们服务条款并承认您已阅读并理解我们的隐私政策的行为准则

不是你要找的答案?浏览其他问题标记问你自己的问题