如何使用numpy蒙版阵列创建蒙版xarray dataarray?

问题描述 投票:0回答:1
T2M,Uwind和Vwind都来自ERA5,是带有LAT,LON和时间的3D阵列。

t2m = xr.open_dataarray('ERA5_t2m_hourly_2004_2024.nc') vwind = xr.open_dataarray('ERA5_vwind_hourly_2004_2024.nc') uwind = xr.open_dataarray('ERA5_uwind_hourly_2004_2024.nc') def wind_tot(uwind, vwind): wind_mag = np.sqrt(vwind**2 + uwind**2) wind_dir = np.arctan2(vwind/wind_mag, uwind/wind_mag) wind_dir = wind_dir * 180/np.pi return wind_mag, wind_dir wind_mag, wind_dir = wind_tot(uwind, vwind) wind_chill = metpy.calc.windchill( t2m * units.K, wind_mag * units('m/s'), ) windchill_ma = wind_chill.to_masked_array() mask = ma.getmask(windchill_ma)

蒙版是带有布尔值的numpy ndarray。 我想在保留数据阵列结构的同时将所有被掩盖的值(在掩码中设置为true)转换为NP.NAN。

例如:
wind_chill = xr.DataArray(array([[[1,6,4,8],[2,4,3,5]],[[2,5,3,6],[2,6,4,8]]]))
mask = array([[[True,True,False,False],[........

masked_wind_chill = xr.DataArray(array([[[NaN,NaN,4,8......

masked_wind_chill = wind_chill.where(~mask)

where(mask = false)的其他变体和最终根本没有将掩码应用于数据。如果我使用的位置(bask = true),则所有数据点都被掩盖,而不管该数据点的值是true还是False。我在使用错误吗?

Edit:实施ARR.FILL:

windchill_ma = wind_chill.to_masked_array()
masked_windchill = windchill_ma.filled(np.nan)

windchill_da = xr.DataArray(masked_windchill, coords={
                                                'time':wind_chill.time,
                                                'lat':wind_chill.lat,
                                                'lon':wind_chill.lon,
})
windchill_da
Gives类似的结果。我发现我正在使用的方法正在按预期工作,但是我似乎并不与标记为“ - ”的区域相对应,因为它们是我想要掩盖的,因为它们高于必要的温度且低于风阈值。
mask = ma.getmask(windchill_ma)
在时间段上返回一个充满“错误”的数组,这些数组完全标记为wind_chill,而wind_chill则在面具中应该是真实的。我使用的面具是不正确的吗?

蒙面阵列,您可以使用

.filled()

方法用NAN填充蒙版值:

import numpy as np
arr = np.ma.array([1., 2., 3.], mask=[False, True, False])
filled_arr = arr.filled(np.nan)

gives

array([ 1., nan, 3.])
python numpy python-xarray metpy masked-array
1个回答
1
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.