Python - 数组重新排序中的奇怪行为

时间:2016-07-07 11:24:57

标签: python arrays

我正在尝试重新排列某些数组,但它似乎始终无法正常运行:

# 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]

我做错了吗?

1 个答案:

答案 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])