繁体   English   中英

如何在 xarray 中应用陆地、海洋面具?

[英]How to apply land, sea mask in xarray?

我有一个网格温度数据集df (时间:2920 x:349 y:277)和相同网格mf (时间:1 x:349 y:277)的陆海掩码,其中mf.land = 1 表示陆地网格点和mf.land = 0 表示海洋点。 我想使用陆海掩码从我的温度数据集df中消除海洋点,即我只想要dfmf.land = 1 的网格点。

这是df的样子: 在此处输入图像描述

这是mf的样子: 在此处输入图像描述

我正在尝试这个:

#import libraries
import os
import matplotlib.pyplot as plt
from netCDF4 import Dataset as netcdf_dataset
import numpy as np
from cartopy import config
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import xarray as xr
import pandas as pd
import netCDF4 as nc

#open temperature data and land sea mask
df=xr.open_dataset('/home/mmartin/LauNath/air.2m.2015.nc')
mf=xr.open_dataset('/home/mmartin/WinterMaxThesis/NOAAGrid/land.nc')

#apply mask
mask = (mf.land >= 1)
LandOnly=df.air.loc[mask]

但是由于尺寸差异而遇到麻烦。 我怎样才能掩盖这些海洋网格点?

问题实际上正在发生,因为我的数据数组确实具有相同的维度,但它们不应该。

如果您将时间维度放在land_mask 上,它将按照您的预期进行广播:

mask = (mf.land >= 1).squeeze(['time'], drop=True)

现在,您可以使用.where屏蔽您的数据,可选择使用drop=True删除所有 nan 切片:

LandOnly=df.air.where(mask, drop=True)

有关更多信息,请参阅有关广​​播和自动对齐的用户指南部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM