gpt4 book ai didi

python - Numpy 非零/flatnonzero 索引顺序; bool 索引中返回元素的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:34 30 4
gpt4 key购买 nike

我想知道 numpy.nonzero/numpy.flatnonzero 返回的索引顺序。

我在文档中找不到任何关于它的内容。它只是说:

A[nonzero(flag)] == A[flag]

虽然在大多数情况下这就足够了,但在某些情况下您需要排序的索引列表。是否保证在 1-D 的情况下对返回的索引进行排序,或者我需要对它们进行显式排序? (一个类似的问题是通过使用 bool 数组 (A[flag]) 选择返回的元素的顺序,根据文档,它必须相同。)

示例:查找标志中 True 元素之间的“间隙”:

flag=np.array([True,False,False,True],dtype=bool)
iflag=flatnonzero(flag)
gaps= iflag[1:] - iflag[:-1]

谢谢。

最佳答案

鉴于 advanced (or "fancy") indexing with integers 的规范,A[nonzero(flag)] == A[flag] 的保证也是在一维情况下值从低到高排序的保证。然而,在更高的维度中,结果(虽然“已排序”)具有与您预期不同的结构。

简而言之,给定一个一维整数数组 ind 和一个要索引的一维数组 x,对于所有有效的 ,我们有以下内容iind 定义:

result[i] = x[ind[i]]

result 采用 ind 的形式,并在 ind 指示的索引处包含 x 的值.这意味着我们可以推断,如果 x[flag] 保持 x 的原始顺序,并且如果 x[nonzero(flag)] 是与 x[flag] 相同,则 nonzero(flag) 必须始终按排序顺序生成索引。

唯一的问题是,对于多维数组,索引存储为每个索引维度的不同数组。所以换句话说,

x[array([0, 1, 2]), array([0, 0, 0])]

等于

array([x[0, 0], x[1, 0], x[2, 0]])

值仍然是排序的,但每个维度都被分解成自己的数组。 (结果,您可以通过广播做一些有趣的事情;但这超出了这个答案的范围。)

这一推理的唯一问题是——令我非常惊讶的是——我找不到一个明确的声明来保证 bool 索引保留数组的原始顺序。尽管如此,我从经验中非常肯定它确实如此。更一般地说,让 x[[True, True, True]] 返回 x 的反转版本将是令人难以置信的反常

关于python - Numpy 非零/flatnonzero 索引顺序; bool 索引中返回元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15412061/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com