gpt4 book ai didi

python-xarray - groupby_bins 在两个变量上?

转载 作者:行者123 更新时间:2023-12-05 05:22:28 24 4
gpt4 key购买 nike

假设我有一个包含 4124 个测量值的数组 nl。每个都与 (lat, lon) 对相关联,指定测量发生的位置。这些位置未网格化,即它们未与规则间隔的值对齐。

In [51]: whos
Variable Type Data/Info
---------------------------------
lat ndarray 4124: 4124 elems, type `float32`, 16496 bytes
lon ndarray 4124: 4124 elems, type `float32`, 16496 bytes
nl ndarray 4124: 4124 elems, type `int16`, 8248 bytes

我为 nl 创建一个 DataArray,指定 latlon 作为坐标:

nl = xr.DataArray(nl, coords={'lon':(['time'], lon), 'lat':(['time'], lat)}, dims=['time'])

我知道我可以将这些值分组到经度或纬度的 bin 中以对它们进行操作,例如

nl_avg_lon = nl.groupby_bins('lon', np.r_[-180:190:10]).mean()
nl_avg_lat = nl.groupby_bins('lat', np.r_[-90:90:10]).mean()

我想做的是将经度 x 纬度的 2D bin 中的值分组,这样我就可以将结果显示为 map 。我不认为 groupby_bins 可以做到这一点,还有其他解决方案吗?

示例更新:

这就是我用 numpy 做我想做的事情的方式:

latbins = np.r_[-90:100:10]
lonbins = np.r_[-180:190:10]
nsamples, xx, yy = np.histogram2d(lon, lat, bins=(lonbins, latbins))
nl_sum, xx, yy = np.histogram2d(lon, lat, bins=(lonbins, latbins), weights=nl)
nl_avg = nl_sum / nsamples

我想避免使用 numpy 来保持 xarray 与 dash 的集成。

最佳答案

按多维分组目前正在研究中,但在 xarray 中尚不可用。

与此同时,有一些非常可以容忍的解决方法。例如,如果您创建第三个坐标,它是 latlon 的组合,您可以按该坐标分组以生成一组 lat x lon垃圾箱

这是一个简单的例子:

In [12]: da=xr.DataArray(np.random.rand(3,3,2), dims=['lat','lon','time'])

In [13]: da
Out[13]:
<xarray.DataArray (lat: 3, lon: 3, time: 2)>
array([[[ 0.69092373, 0.94961267],
[ 0.74086633, 0.22628054],
[ 0.08215398, 0.16806347]],

[[ 0.67699002, 0.86242477],
[ 0.54688503, 0.57882117],
[ 0.21120849, 0.68743872]],

[[ 0.43816928, 0.57682212],
[ 0.10402045, 0.78923986],
[ 0.53284326, 0.23705761]]])
Coordinates:
* lat (lat) int64 0 1 2
* lon (lon) int64 0 1 2
* time (time) int64 0 1

In [14]: da.stack(latlon=['lat','lon'])
Out[14]:
<xarray.DataArray (time: 2, latlon: 9)>
array([[ 0.69092373, 0.74086633, 0.08215398, 0.67699002, 0.54688503,
0.21120849, 0.43816928, 0.10402045, 0.53284326],
[ 0.94961267, 0.22628054, 0.16806347, 0.86242477, 0.57882117,
0.68743872, 0.57682212, 0.78923986, 0.23705761]])
Coordinates:
* time (time) int64 0 1
* latlon (latlon) object (0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) ...

In [15]: da.stack(latlon=['lat','lon']).groupby('latlon').mean()
Out[15]:
<xarray.DataArray (latlon: 9)>
array([ 0.8202682 , 0.48357344, 0.12510872, 0.76970739, 0.5628531 ,
0.44932361, 0.5074957 , 0.44663016, 0.38495044])
Coordinates:
* latlon (latlon) object (0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) ...

关于python-xarray - groupby_bins 在两个变量上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40465026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com