加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Numpy非零/ flatnonzero索引顺序;布尔索引中返回元素

发布时间:2020-12-20 13:33:25 所属栏目:Python 来源:网络整理
导读:我想知道numpy.nonzero / numpy.flatnonzero返回的索引的顺序. 我在文档中找不到任何关于它的内容.它只是说: A[nonzero(flag)] == A[flag] 虽然在大多数情况下这已足够,但有些时候需要一个排序的索引列表.是否保证返回的索引在1-D的情况下排序,或者我需要明
我想知道numpy.nonzero / numpy.flatnonzero返回的索引的顺序.

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

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

虽然在大多数情况下这已足够,但有些时候需要一个排序的索引列表.是否保证返回的索引在1-D的情况下排序,或者我需要明确地对它们进行排序? (类似的问题是简单地通过选择一个布尔数组(A [flag])返回的元素的顺序,根据文档必须相同.)

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

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

谢谢.

解决方法

给定 advanced (or “fancy”) indexing with integers的规范,A [非零(flag)] == A [flag]的保证也保证了在1-d情况下值从低到高排序.但是,在更高的维度中,结果(虽然“已排序”)具有与您预期不同的结构.

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

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

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

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

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

等于

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

值仍然是排序的,但每个维度都会分解为自己的数组. (你可以通过播放来做有趣的事情;但这超出了这个答案的范围.)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读