【问题标题】:Python: Struggling to mask part of a datasetPython:努力掩盖数据集的一部分
【发布时间】:2018-06-20 08:23:41
【问题描述】:

我确信有一个简单的解决方法,我对 Python 相当陌生,可以在 Matlab 中完成此操作。

我正在尝试为海洋数据屏蔽某个纬度和经度框。

我可以为纬度和经度创建布尔蒙版图。这给了我 101 个纬度乘 131 个经度(来自全球数据集 181 x 361)。但无法弄清楚如何以相同的方式屏蔽我的 2d 数据集,因此我可以将其绘制在 pcolormesh 图上。

基本上,我的形状不正确。 如何屏蔽我的数据集(与 lat x lon 的原始形状相同),以便子集的形状与我的 lats/longs 相同,因此所选区域是可绘制的?

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)

感谢您的宝贵时间。

【问题讨论】:

标签: python numpy matplotlib


【解决方案1】:

如果 data 是一个 numpy 数组,那么下面的脚本应该可以解决您的问题

m, n = data.shape
data_masked = data[np.arange(m)[lat_mask][:, None], np.arange(n)[long_mask]]

【讨论】:

  • 这正是我想要的!必须有一些方法可以做到这一点,但效果很好。谢谢!!
  • @NicPittman 总是乐于提供帮助:-)。您能否将我的回答标记为您问题的解决方案。非常感谢
【解决方案2】:

您必须将掩码直接应用于数据框,而不是列名:

masked_data = data[
   (data["lat_col_name"] <= 50) & 
   (data["lat_col_name"] >= -50) & 
   (data["lon_col_name"] >= -120) & 
   (data["lon_col_name"] <= 70)
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-28
    • 2018-01-03
    • 2012-01-29
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2012-04-05
    相关资源
    最近更新 更多