как найти наименьшее n значений в распределенном массиве dask - PullRequest
0 голосов
/ 29 июня 2019

У меня есть распределенный массив dask с формой (2400,2400) с размером фрагмента (100,100).Я думал, что мог бы использовать 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]])

1 Ответ

1 голос
/ 02 июля 2019

Одна идея состоит в том, чтобы вызывать topk дважды, по одному разу для каждой оси.

Звучит хорошо для меня!

Вы могли бы сначала рассмотреть возможность выравнивания массива, но я могуне вижу в этом преимущества перед тем, что вы уже нашли.

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