1 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是一個(gè)有趣的問題;xarray 的自動(dòng)廣播使它非常干凈。
我不確定氣旋位置數(shù)組的結(jié)構(gòu),但我假設(shè)它的結(jié)構(gòu)如下(或者至少可以操縱成這種形式):
centers = np.array([[12.0, -62.0], [40.0, -80.0], [67.0, -55.0]])
cyc_pos = xr.DataArray(centers, coords={"coord": ["lon", "lat"]}, dims=["cyclone", "coord"])
換句話說,每一行代表每個(gè)旋風(fēng)的經(jīng)度和緯度值。
以cyc_pos這種方式定義,使用該函數(shù)獲取經(jīng)緯度網(wǎng)格中的每個(gè)點(diǎn)到每個(gè)氣旋中心的距離haversine非常簡(jiǎn)單,從那里獲取所需的掩碼僅需多一行。
distances = haversine(cyc_pos.sel(coord="lon"), cyc_pos.sel(coord="lat"), lon, lat)
如果您想要針對(duì)特定風(fēng)暴的面罩,您可以使用:
storm_id = 0
mask = (distances <= 1110.0).isel(cyclone=storm_id)
或者,如果您想要一個(gè)可以應(yīng)對(duì)所有風(fēng)暴的面具,您可以使用:
mask = (distances <= 1110.0).any("cyclone")
添加回答
舉報(bào)