[英]Numpy nonzero/flatnonzero index order; order of returned elements in boolean indexing
我想知道numpy.nonzero / numpy.flatnonzero返回的索引的順序。
我在文檔中找不到任何關於它的內容。 它只是說:
A[nonzero(flag)] == A[flag]
雖然在大多數情況下這已足夠,但有些時候需要一個排序的索引列表。 是否保證返回的索引在1-D的情況下排序,或者我需要明確地對它們進行排序? (類似的問題是簡單地通過選擇一個布爾數組(A [flag])返回的元素的順序,根據文檔必須相同。)
示例:查找標志中True元素之間的“間隙”:
flag=np.array([True,False,False,True],dtype=bool)
iflag=flatnonzero(flag)
gaps= iflag[1:] - iflag[:-1]
謝謝。
給定帶有整數的高級(或“花式”)索引的規范, A[nonzero(flag)] == A[flag]
的保證也保證了值在1-d中從低到高排序。案件。 但是,在更高的維度中,結果(雖然“已排序”)具有與您預期不同的結構。
簡而言之,給定一個整數ind
的一維數組和一個要索引的一維數組x
,我們為ind
定義的所有有效i
都有以下內容:
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]])
值仍然是排序的,但每個維度都會分解為自己的數組。 (你可以通過播放來做有趣的事情;但這超出了這個答案的范圍。)
這種推理的唯一問題是 - 令我驚訝的是 - 我找不到一個明確的語句來保證布爾索引保留數組的原始順序。 盡管如此,我從經驗中確信它確實如此。 更一般地說,讓x[[True, True, True]]
返回x
的反轉版本是令人難以置信的反常 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.