我敢肯定有一个简单的解决方法,我是Python的新手,可以在一分钟内在Matlab中完成。
我正在尝试为海洋数据屏蔽某个经纬度框。
我可以为纬度和经度创建布尔掩码映射。这给了我101个纬度乘以131个经度(来自全局数据集181 x 361)。但是无法弄清楚如何以相同的方式遮罩我的2d数据集,因此我可以将其绘制在pcolormesh图上。
基本上,我的形状不正确。 如何掩盖我的数据集(原始形状与经纬度相同),以便子集与经纬度相同,从而可以绘制所选区域?
lat_mask=[(lat<=50)&(lat>=-50)] #boolean for lat area
lat_masked=lat[lat_mask] #the lat subset i want
lon_mask=[(lon>=-120)&(lon<=70)]
lon_masked=lon[lon_mask]
#Mask the Dataset - Error here. How I imagine it should work but does not
data_masked=data[lat_mask,long_mask] #this is how i would do it in matlab but not even close
#something like this works a bit better but is still not functional
lam,lom= np.meshgrid(lat_mask,lon_mask)
data_masked = np.ma.array(data,mask=lom)
#plot
plt.pcolormesh(lom,lam,data)
感谢您的时间。
答案 0 :(得分:1)
您必须将掩码直接应用于数据框,而不是列名称:
masked_data = data[
(data["lat_col_name"] <= 50) &
(data["lat_col_name"] >= -50) &
(data["lon_col_name"] >= -120) &
(data["lon_col_name"] <= 70)
]
答案 1 :(得分:1)
如果 data 是一个numpy数组,那么以下脚本应该可以解决您的问题
m, n = data.shape
data_masked = data[np.arange(m)[lat_mask][:, None], np.arange(n)[long_mask]]