2016-07-07 108 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

谢谢,我现在明白了。出于某种原因(愚蠢),我认为它通过为各个元素分配新职位而发挥作用。 –