【问题标题】:Find coordinates of max value in dataarray associated with 2D coordinates在与二维坐标相关的数据数组中查找最大值的坐标
【发布时间】:2021-05-22 18:21:12
【问题描述】:

我有一个数据数组,其中包含纬度和经度 (y,x) 的多维坐标。 Xarray 原生地处理这些数据非常棒,它允许我做类似da.max() 的事情并接收一个值。但是,似乎找到与该最大值相关的坐标可能不是那么简单(或者我可能会遗漏一些东西)。

这是我的数据数组的结构:

xarray.DataArray 'Power' (y:1500, x:2500)
array([[nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       ...,
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan]], dtype=float32)
Coordinates:
lon
(y, x)
float64
-113.1 -113.0 ... -52.98 -52.95
lat
(y, x)
float64
15.12 15.12 15.12 ... 51.36 51.36

现在,执行da.max() 之类的操作会返回值array(3335.06591797)。尝试da.argmax() 也有效并返回array(2365177)。我认为有一种方法可以利用此值来查找数组中的位置,即坐标,但我不知道该怎么做。

第三种选择是尝试使用da.idxmax(),但这需要数据数组具有共同的维度和坐标,而我在这种情况下没有。

也许也有某种 numpy 方法可以做到这一点,但我不清楚这样做的过程。关于在这里做什么的任何想法?使用da.argmax() 似乎是可行的方法,但我被卡住了。

【问题讨论】:

    标签: arrays python-3.x python-xarray


    【解决方案1】:

    我查看了 argmax 的文档,其中提到了 dim 的以下内容:

    求最大值的维度。默认情况下,查找 所有维度的最大值 - 现在返回一个 int 用于向后 兼容性,但这已被弃用,将来会返回一个字典 具有所有维度的索引;返回所有维度的字典 现在,通过“……”。

    https://xarray.pydata.org/en/stable/generated/xarray.DataArray.argmax.html

    所以我想你快到了:只需使用省略号:da.argmax(...)

    演示:

    import numpy as np
    import xarray as xr
    
    nrow = 2
    ncol = 3
    da = xr.DataArray(np.random.rand(nrow, ncol), {"x": range(ncol), "y": range(nrow)}, ["y", "x"])
    da
    
    <xarray.DataArray (y: 2, x: 3)>
    array([[0.79480753, 0.06602363, 0.86688562],
           [0.37440161, 0.39527931, 0.31792832]])
    Coordinates:
      * x        (x) int32 0 1 2
      * y        (y) int32 0 1
    

    还有da.argmax(...):

    {'y': <xarray.DataArray ()>
     array(0, dtype=int64),
     'x': <xarray.DataArray ()>
     array(2, dtype=int64)}
    

    还有这个较早的问题:How to get the coordinates of the maximum in xarray? 但它早于argmax

    【讨论】:

    • 很好,不知道我是怎么错过的。谢谢!
    猜你喜欢
    • 2018-06-27
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2019-04-14
    • 2020-06-23
    • 1970-01-01
    • 2012-10-02
    相关资源
    最近更新 更多