Numpy nonzero/flatnonzero索引顺序;布尔索引中返回元素的顺序

2024-09-30 14:22:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道numpy.非零/ numpy.FlatNon零. 在

我在文件里找不到任何关于它的东西。上面写着:

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

虽然在大多数情况下,这已经足够了,但是当您需要一个排序的索引列表时,也会有一些索引。它保证返回的索引在一维的情况下被排序,还是我需要显式地排序?(一个类似的问题是通过使用布尔数组(一个[flag])选择返回的元素的顺序,根据文档,这个数组必须是相同的。)

示例:查找flag中真实元素之间的“间隙”:

^{pr2}$

谢谢。在


Tags: 文件文档numpy元素示例列表排序顺序
1条回答
网友
1楼 · 发布于 2024-09-30 14:22:31

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

简而言之,给定一个一维整数数组ind和一个一维数组x,我们为ind定义了所有有效的i

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

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

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

^{pr2}$

等于

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

这些值仍然被排序,但是每个维度被分解成自己的数组。(因此,你可以用广播做一些有趣的事情,但这超出了本文的回答范围。)

这种推理的唯一问题是,令我吃惊的是,我找不到一个明确的语句来保证布尔索引保持数组的原始顺序。尽管如此,从我的经验来看,我很肯定这是真的。更一般地说,让x[[True, True, True]]返回x的一个颠倒的版本是不合理的。在

相关问题 更多 >