簡體   English   中英

使用 Xarray 和 Metpy 掩蓋風

[英]Masking Winds Using Xarray and Metpy

我的目標是僅當 plot 風倒鈎超過感興趣區域中觀察到的最大風速的 2/3 時(這是標准米勒復合圖的一部分)。

MetPy 示例中為 Miller plot 執行此操作的代碼

wspd_500 = mpcalc.wind_speed(u_500, v_500)
wspd_850 = mpcalc.wind_speed(u_850, v_850)


mask_500 = ma.masked_less_equal(wspd_500, 0.66 * np.max(wspd_500)).mask
u_500[mask_500] = np.nan
v_500[mask_500] = np.nan

# 850 hPa
mask_850 = ma.masked_less_equal(wspd_850, 0.66 * np.max(wspd_850)).mask
u_850[mask_850] = np.nan
v_850[mask_850] = np.nan

skip_500 = (slice(None, None, 10), slice(None, None, 10))
skip_850 = (slice(None, None, 8), slice(None, None, 8))

# 500-hPa wind barbs
jet500 = ax.barbs(lon[skip_500], lat[skip_500], u_500[skip_500].m, v_500[skip_500].m, length=6,
                  transform=ccrs.PlateCarree(),
                  color='blue', zorder=9, label='500-hPa Jet Core Winds (kt)')

# 850-hPa wind barbs
jet850 = ax.barbs(lon[skip_850], lat[skip_850], u_850[skip_850].m, v_850[skip_850].m, length=6,
                  transform=ccrs.PlateCarree(),
                  color='k', zorder=8, label='850-hPa Jet Core Winds (kt)')

返回錯誤

TypeError: len() of unsized object

追溯到線

u_500[mask_500] = np.nan

為了排除故障,我打印了 wspd_500:

[[0.3819355070590973 0.41758668422698975 0.41758668422698975 ... nan nan  nan] [0.3577602505683899 0.4053502082824707 0.4053502082824707 ... nan nan  nan] [0.3433985114097595 0.4025561213493347 0.4025561213493347 ... nan nan  nan] ... [nan nan nan ... nan nan nan] [nan nan nan ... nan nan nan] [nan nan nan ... nan nan nan]] meter / second

這很奇怪,因為我不確定為什么所有這些 nan 值不斷出現。 u_500 和 v_500 似乎包含所有相關值。 當我 plot 使用不同的方法時:

ax.barbs(x[wind_slice], y[wind_slice], u_850.metpy.unit_array[wind_slice, wind_slice].to('knots'), v_850.metpy.unit_array[wind_slice, wind_slice].to('knots'), length=6, color = '#ff0000')

我在整個領域都遇到了風倒鈎。 所以我懷疑是否缺少數據。

此外,當我打印 mask_500 時,我得到一個 False。 這應該是一組 True 或 False 布爾值,具體取決於風速是高還是低(至少我認為)。

所以我的問題是:在給定的壓力水平下,如何將這個面罩僅用於 plot 顯着強風? 為什么 mpcalc.wind_speed 方法會從完整的 u 和 v 組件數據數組中返回一堆 nan 值?

作為參考,我使用的是通過虹吸管從 UCAR TDS 獲得的 HRRR 數據。

在重新創建它時,它會回到源自您的 HRRR output 的nan 當我使用虹吸管通過 NCSS 拉入當前 HRRR output 時,域邊緣周圍大約有 5% 的數據丟失。 您可以使用numpy.isnan進行檢查。 如果您執行比較mask_500 = ma.masked_less_equal(wspd_500, 0.66 * np.max(wspd_500)).mask最大值將返回為nan nan的任何比較都將返回False ,因此您的掩碼表明整個數組評估為False ,即您所看到的行為。 為避免這種情況,請確保您的比較值是非 nan 值的max ,例如,

notnan_mask_500 = np.isfinite(wspd_500)
mask_500 = ma.masked_less_equal(wspd_500, 0.66 * np.max(wspd_500[notnan_mask_500])).mask

這將拉出數組的最大有限值並允許比較工作,我還沒有一直運行 map。 但這至少返回了一個有效的掩碼和結果數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM