对于一个形状为(len(纬度),len(经度))的全局分布变量,我想得到一个对应于感兴趣区域的子集。你知道吗
特定区域由两个角(左低纬度/经度、右上纬度/经度)定义。所以,这个数组就是我现在拥有的:
值是表示全局分布的二维数组
Lon是从(-180.0179.875)开始的一维数组,拥有2880个元素
Lat是从(-90,89.875)开始的一维数组,拥有1440个元素。
llcrnrlat,urcrnrlat,llcrnrlon,urcrnrlon=15,50,90,150
注意llcrnrrat etc可能不包含在Lon或Lat中,我不能使用
VALUE_SELECT = VALUE[np.where(Lat ==llcrnrlat):np.where(Lat ==urcrnrlat),
np.where(Lon ==urcrnrlat):np.where(Lon ==urcrnrlat)]
所以,我的尝试是循环Lat和Lon,目的是找到最接近的值。你知道吗
def find_nearest(array,value): ## This function was clipped from website
idx = (np.abs(array-value)).argmin()
return array[idx]
llcrnrlon,urcrnrlon = 90,150
llcrnrlat, urcrnrlat = 15, 50
nx_st = np.where(lon == (find_nearest(lon,llcrnrlon )))[0]
nx_en = np.where(lon == (find_nearest(lon,urcrnrlon )))[0]
ny_st = np.where(lat == (find_nearest(lat,llcrnrlat )))[0]
ny_en = np.where(lat == (find_nearest(lat,urcrnrlat )))[0]
lon_select,lat_select = lon[nx_st:nx_en+1], lat[ny_st:ny_en+1]
value_select =VALUE[ny_st:ny_en+1,nx_st:nx_en+1]
在执行这些子例程之后,这里有一个警告:
/Users/anaconda/lib/python2.7/site-packages/ipykernel/main.py:1: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future if name == 'main':
找到最近的+np.哪里如果值是均匀分布的,则完全不需要大量的计算工作。你真的明白代码在做什么吗?仔细阅读这些函数。对数组中的每个值进行减法运算,然后找到偏移量最小值的索引。然后你查这个最小值。然后使用该值,再次检查数组中的每个值并测试其是否匹配,从而创建一个新的真/假值数组。然后对数组进行排序,找到正确的索引。与
argmin()
找到的索引相同每个lat/lon分为8个部分。所以你只需要乘以8,对吗?然后将其设为整数,它会自动应用
floor()
相关问题 更多 >
编程相关推荐