Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据数组中值的相对大小,将numpy数组按特定顺序进行排序(由单独的列表指定)_Python_Arrays_Sorting_Numpy - Fatal编程技术网

Python 如何根据数组中值的相对大小,将numpy数组按特定顺序进行排序(由单独的列表指定)

Python 如何根据数组中值的相对大小,将numpy数组按特定顺序进行排序(由单独的列表指定),python,arrays,sorting,numpy,Python,Arrays,Sorting,Numpy,在一段代码中,我已经构建了一个numpy数组,并且我想根据列表中指定的特定顺序对第一个数组进行排序。结果将是第三个数组(新的_值) 第一个数组具有要排序的值 values = numpy.array([10.0, 30.1, 50, 40, 20]) 该列表提供了新_值中值的索引所给出的顺序,这些值应按降序排列,其中0对应于最大的数字 order=[0, 3, 1, 4, 2]. 所以 我试图找到一个特定的排序函数来实现这一点,例如argsort或使用一个键,但是我不知道如何使这些函数适应这

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

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

values = numpy.array([10.0, 30.1, 50, 40, 20])
该列表提供了新_值中值的索引所给出的顺序,这些值应按降序排列,其中0对应于最大的数字

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

我试图找到一个特定的排序函数来实现这一点,例如argsort或使用一个键,但是我不知道如何使这些函数适应这种情况

有没有一个简单快速的方法来实现这一点,因为我将在许多迭代中这样做。如果这有利于使用更好的方法进行排序,我愿意更改第二个数组order,以另一种方式指定索引

目前我正在使用以下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] 

提前谢谢你

您可以简单地使用索引:

>>> 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. ])

想想看,它应该是另一种方式:
sorted\u array[order]=sorted(values,reverse=True)
?@Divakar你的意思是什么?我的意思是,如果你试图获得
新的\u值作为最终输出,结果就是
数组([50,30.1,10,40,20])
,我假设它与你的
sorted array
等价,您可能需要像
sorted\u数组[order]=values
那样对其进行索引,其中
values=sorted(values,reverse=True)
@Kasra无需担心!不要忘了在索引之前初始化该数组。感谢@Kasra提供的答案。Kasra答案的最后部分中的代码运行良好,我已经在现有代码中实现了它。这是一个比我使用的更简单、更快的方法,我可以在将来的代码中使用这一课。完美的也谢谢你这么快就找到了答案。
>>> values[order]=np.sort(values)[::-1]
>>> values
array([ 50. ,  30.1,  10. ,  40. ,  20. ])