如何根据数组

时间:2015-06-01 14:59:27

标签: python arrays sorting numpy

在一段代码中,我已经构造了一个numpy数组,并且我想根据列表中指定的特定顺序对第一个数组进行排序。结果将是第3个数组(new_values)。

第一个数组具有要排序的值。

values = numpy.array([10.0, 30.1, 50, 40, 20])

该列表提供了new_values中值的索引给出的顺序,该顺序应按降序排列,其中0对应于最大数字。

order=[0, 3, 1, 4, 2].

所以,

new_values[0] > new_values[3] > new_values[1] > new_values[4] > new_values[2]

我试图找到一个特定的排序函数来完成这个,比如argsort或者一个键,但是我不明白如何使这些适应这种情况。

是否有一种简单的快速方法可以完成此操作,因为我将在多次迭代中执行此操作。我愿意更改第二个数组,顺序,以另一种方式指定索引,如果这有利于使用更好的方法进行排序。

目前我正在使用以下for循环。

size=len(values)
new_values = np.zeros(size)
values = sorted(values,reverse=True)

    for val in range(0, size):
        new_values[int(order[val])] = values[val] 

提前谢谢!

1 个答案:

答案 0 :(得分:3)

您可以简单地使用索引:

>>> import numpy as np
>>> values = np.array([10.0, 30.1, 50, 40, 20])
>>> order=[0, 3, 1, 4, 2]
>>> sorted_array=values[order]
>>> sorted_array
array([ 10. ,  40. ,  30.1,  20. ,  50. ])

如果您想要以下条件,@ Divakar也会在评论中提到:

new_values[0] > new_values[3] > new_values[1] > new_values[4] > new_values[2]

你可以这样做:

>>> values[order]=np.sort(values)[::-1]
>>> values
array([ 50. ,  30.1,  10. ,  40. ,  20. ])