Python:努力掩盖数据集的一部分

时间:2018-06-20 08:23:42

标签: python numpy matplotlib

我敢肯定有一个简单的解决方法,我是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)

感谢您的时间。

2 个答案:

答案 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]]