首页 > 解决方案 > 在一个尴尬的数组中获得最小值的所有位置

问题描述

我有一个尴尬的数组,我想从中提取最小值和最大值的所有位置。但是,当我使用以下内容时,我只能提取第一次出现,而不是全部。是否有可能获得所有索引。

>>> a1=ak.Array([[], [], [1, 1, 0, 1, 1, 0, 0], [], [], [], [], [0, 0], [], [-1, -1, -1, -1]])
>>> ak.to_list(ak.argmin(a1,axis=-1, keepdims=True))
[[None], [None], [2], [None], [None], [None], [None], [0], [None], [0]]

我需要的输出是:

[[None], [None], [2,5,6], [None], [None], [None], [None], [0,1], [None], [0,1,2,3]]

在类似的行中,除了 argmin 或 argmax 之外,还可以执行类似 argN(array, number, axis=-1, keepdims=True) 的操作,其中当 number = 0 时变为 argmin,在 number = 1 时变为 argmax,对于这种特殊情况。

我试图查看 ak.where,但如果使用 ak.where 可行,我无法得到任何提示。文档说,ak.where 将接受 ak.Array of booleans

>>> a1==1

<Array [[], [], ... False, False, False]] type='10 * var * bool'>

因此我尝试了:

>>> ak.where((a1==1))

我得到的错误是: return to_numpy(array.toRegularArray(), allow_missing=allow_missing) ValueError: in ListOffsetArray64, cannot convert to RegularArray because subarray lengths are not regular

https://github.com/scikit-hep/awkward-1.0/blob/0.3.1/src/cpu-kernels/operations.cpp#L902

标签: awkward-array

解决方案


推荐阅读