ETOPO1区域选择(在python) -地球科学堆栈交换江南电子竞技平台江南体育网页版
最近30从www.hoelymoley.com
2023 - 07 - 10 - t12:31:45z
//www.hoelymoley.com/feeds/question/23904
https://creativecommons.org/licenses/by-sa/4.0/rdf
//www.hoelymoley.com/q/23904
4
ETOPO1区域选择(在python中)
shamalaia
//www.hoelymoley.com/users/6001
2022 - 06 - 12 - t13:32:09z
2022 - 06 - 15 - t09:38:59z
< p >我想选择一个地区的地中海ETOPO1数据。< / p > < pre > <代码> #深度测量法从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]。数据< /代码> < / pre > < p >这将返回一个空数组:< / p > < pre > <代码>祝辞祝辞数组([],形状= (0,24),dtype = float64) < /代码> < / pre > < p >的一个主要问题:< / p > < p > <强> 1 -我做错了什么?< /强>当我检查经度纬度值我切片(lat_input [lat_idx_max]等)他们是有意义的。然而,lon_idx_max lon_idx_min高于len(威尼斯平底渔船)(11556 vs 10801和11604年)。我想这是问题,但我不能找到它的原因。< / p > < p >一个额外的问题:< / p > < p > 2 -为什么如果我翻转经度和纬度给我一些数据吗? Note that the data do not make sense (-4000ish meters in the Adriatic Sea...)
//www.hoelymoley.com/questions/23904/etopo1-region-selection-in-python/23924 # 23924
5
答案由smichel ETOPO1地区选择(在python中)
smichel
//www.hoelymoley.com/users/26870
2022 - 06 - 15 - t09:38:59z
2022 - 06 - 15 - t09:38:59z
< p >看起来你简单的顺序打乱你的最小和最大的自由。你在错误的地方(-44°代替+ 44°)。< / p > < pre > <代码> #深度测量法导入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) < /代码> < / pre > < p >利用np。linspace您可以删除的循环代码并明显加速。没有必要创建一个从纬度和经度meshgrid。< / p >