如何在分布式dask数组中找到最小的n值

如何在分布式dask数组中找到最小的n值,dask,dask-distributed,Dask,Dask Distributed,我有一个分布式dask阵列,形状(2400)和chunksize(100100)。我想我可以用topk(-n)来找到最小的n值。但是,它似乎返回了一个形状数组(2400,n),因此它似乎在每一行中找到了最小的n。有没有办法使用topk在所有行(整个数组)中获得最小的n值 一个想法是调用topk两次,每个轴调用一次 >>> dist dask.array<pow, shape=(2400, 2400), dtype=float64, chunksize=(100, 100)

我有一个分布式dask阵列,形状(2400)和chunksize(100100)。我想我可以用topk(-n)来找到最小的n值。但是,它似乎返回了一个形状数组(2400,n),因此它似乎在每一行中找到了最小的n。有没有办法使用topk在所有行(整个数组)中获得最小的n值

一个想法是调用topk两次,每个轴调用一次

>>> dist
dask.array<pow, shape=(2400, 2400), dtype=float64, chunksize=(100, 100)>
>>> dist.topk(-5,axis=0).topk(-5,axis=1).compute()
array([[   0.        , 2620.09503644, 2842.15200157, 2955.08409356,
        3163.49458669],
       [3660.67698657, 3670.4457495 , 3700.09837707, 3717.09052889,
        4002.86497399],
       [4125.89820524, 4139.44658137, 4250.50420539, 4331.01304547,
        4402.14606754],
       [4328.22966119, 4378.25193428, 4507.94409903, 4522.4913488 ,
        4555.06860541],
       [4441.58755402, 4560.95625938, 4576.39333974, 4682.06215251,
        4765.11531865]])
距离 dask阵列 >>>dist.topk(-5,轴=0)。topk(-5,轴=1)。compute() 阵列([[0,2620.0950364420842.152001572955.08409356, 3163.49458669], [3660.67698657, 3670.4457495 , 3700.09837707, 3717.09052889, 4002.86497399], [4125.89820524, 4139.44658137, 4250.50420539, 4331.01304547, 4402.14606754], [4328.22966119, 4378.25193428, 4507.94409903, 4522.4913488 , 4555.06860541], [4441.58755402, 4560.95625938, 4576.39333974, 4682.06215251, 4765.11531865]]) 一个想法是调用topk两次,每个轴调用一次

>>> dist
dask.array<pow, shape=(2400, 2400), dtype=float64, chunksize=(100, 100)>
>>> dist.topk(-5,axis=0).topk(-5,axis=1).compute()
array([[   0.        , 2620.09503644, 2842.15200157, 2955.08409356,
        3163.49458669],
       [3660.67698657, 3670.4457495 , 3700.09837707, 3717.09052889,
        4002.86497399],
       [4125.89820524, 4139.44658137, 4250.50420539, 4331.01304547,
        4402.14606754],
       [4328.22966119, 4378.25193428, 4507.94409903, 4522.4913488 ,
        4555.06860541],
       [4441.58755402, 4560.95625938, 4576.39333974, 4682.06215251,
        4765.11531865]])
听起来不错

你可以考虑先把数组变平,但我看不到你已经找到的这个优点。

x.flatten().topk(...)

只是确认x.topk(-n,axis=0)。topk(-n,axis=1)。compute()为您提供Dask数组中最小的n平方元素?哦,我不知道。我以为你已经试过了,而且成功了。有一个简单的方法可以找到!答案是“不一定”。一种病理情况是数组中的最小值都在同一行中。然后topk(-n,axis=0)选择其中最小的n个,topk(-n,axis=1)不会进一步考虑其余的行元素