2016-07-07 149 views
-1

我試圖重新安排一些陣列,但它似乎並不總是正常工作怪異的行爲:Python的 - 在陣列重新排序

# Works fine 
arr = np.array([2,3,1])  
idx1 = np.array([1,0,2]) 
arr[idx1] 
>> array([3, 2, 1]) 

# Doesn't work 
arr = np.array([2,3,1]) 
idx2 = np.array([2,0,1]) 
arr[idx2] 
>> array([1, 2, 3]) # Should have been [3,1,2] 

難道我做錯了什麼?

+3

否,它應該是'[1,2,3]'。 '1'位於pos 2,'2'位於pos 0,'3'位於pos 1.另一種查看方法:在'[1,0,2]'上索引'產生'[3,2,1 ]';爲什麼不反轉索引反轉輸出數組? – erip

+0

要獲得[3,1,2],你需要'idx2 = np.array([1,2,0])'。 –

回答

0

索引使用索引數組重建您的數組。 索引數組包含原始數組中元素的位置(索引)列表。

numpy的陣列可以與其它陣列(或任何其他序列 - 像對象,可以被轉換成一個陣列,如列表進行索引,與 異常的元組;見本文件爲什麼結束這是)。 索引數組的使用範圍從簡單明瞭的案例到 複雜而難以理解的案例。對於索引數組的所有情況, 返回的是原始數據的副本,而不是針對 切片的視圖。

索引數組必須是整數類型。數組 中的每個值指示數組中要使用哪個值來代替索引。

你的情況:

arr = np.array([2,3,1]) 
idx2 = np.array([2,0,1]) 

指數[2, 0, 1]意味着[third element, first element, second element]

隨着arr[idx2][1, 2, 3]。這是正確的。

實施例:指數與第二和第三元件

>>> arr[np.array([1,2])] 
array([3, 1]) 
+0

你是對的,sr。 「排序」是虛假的詞彙。 – qvpham

+0

謝謝,我現在明白了。出於某種原因(愚蠢),我認爲它通過爲各個元素分配新職位而發揮作用。 –