如何在Python中根据另一数组的值对NumPy数组重新排序?
实现按另一个NumPy数组的值排序
当然可以实现,而且用NumPy的内置方法比你尝试的循环写法更简洁高效。先理清楚你的需求:根据value_array的值从大到小排序,提取对应位置的initial_array元素,对应逻辑如下:
完整实现代码
import numpy as np # 定义你的数组 initial_array = np.array([1, 6, 3, 4]) value_array = np.array([10, 2, 3, 15]) # 获取value_array降序排序的索引 sorted_indices = np.argsort(value_array)[::-1] # 用索引提取initial_array的对应元素 output_array = initial_array[sorted_indices] print(output_array) # 输出: [4 1 3 6]
步骤解释
np.argsort(value_array):返回value_array升序排序后的元素索引,这里会得到[1, 2, 0, 3](对应value_array里的2、3、10、15)[::-1]:把索引倒序,得到降序对应的索引[3, 0, 2, 1](对应value_array里的15、10、3、2)initial_array[sorted_indices]:用排序后的索引提取initial_array的元素,直接得到预期结果
如果你想用循环实现(不推荐大数组)
如果坚持用循环思路,也可以通过配对元素再排序的方式实现:
import numpy as np initial_array = np.array([1, 6, 3, 4]) value_array = np.array([10, 2, 3, 15]) # 把两个数组的元素配对 pairs = list(zip(initial_array, value_array)) # 按value值降序排序 pairs_sorted = sorted(pairs, key=lambda x: x[1], reverse=True) # 提取排序后的initial元素 output_array = np.array([item[0] for item in pairs_sorted]) print(output_array) # 输出: [4 1 3 6]
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

