简单的问题:我不仅想要xarray DataArray中的最大值,还要想要它的坐标.怎么做?
我当然可以编写自己的简单reduce函数,但我想知道xarray中是否有内置函数?
Max*_*ian 18
您可以使用da.where()基于最大值进行过滤:
In [15]: da = xr.DataArray(np.random.rand(2,3,4))
In [16]: da.where(da==da.max(), drop=True).squeeze()
Out[16]:
<xarray.DataArray (dim_0: 1, dim_1: 1, dim_2: 1)>
array([[[ 0.91077406]]])
Coordinates:
* dim_0 (dim_0) int64 0
* dim_1 (dim_1) int64 2
* dim_2 (dim_2) int64 3
Run Code Online (Sandbox Code Playgroud)
一种idxmax()方法在 xarray 中非常受欢迎,但还没有人开始实施它。
现在,您可以通过组合argmax和来找到最大值的坐标isel:
>>> array = xarray.DataArray(
... [[1, 2, 3], [3, 2, 1]],
... dims=['x', 'y'],
... coords={'x': [1, 2], 'y': ['a', 'b', 'c']})
>>> array
<xarray.DataArray (x: 2, y: 3)>
array([[1, 2, 3],
[3, 2, 1]])
Coordinates:
* x (x) int64 1 2
* y (y) <U1 'a' 'b' 'c'
>>> array.isel(y=array.argmax('y'))
<xarray.DataArray (x: 2)>
array([3, 3])
Coordinates:
* x (x) int64 1 2
y (x) <U1 'c' 'a'
Run Code Online (Sandbox Code Playgroud)
这可能是.max()每种情况下都应该做的!不幸的是,我们还没有到那里。
问题是它还没有以我们想要的方式在多个维度上推广到最大值:
>>> array.argmax() # what??
<xarray.DataArray ()>
array(2)
Run Code Online (Sandbox Code Playgroud)
问题在于它会自动展平,例如np.argmax. 相反,我们可能想要像元组数组或数组元组之类的东西,指示最大值的原始整数坐标。也欢迎为此做出贡献 -有关更多详细信息,请参阅此问题。
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |