python – Numpy非零/ flatnonzero索引顺序;布尔索引中返回元素
我想知道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的反转版本是令人难以置信的反常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |