簡體   English   中英

Numpy非零/ flatnonzero指數順序; 布爾索引中返回元素的順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM