如何对(N,2)型NumPy数组每行元素交换,使较大值在前
处理(N,2) NumPy数组:每行元素降序排列(大值在前)
假设我们有如下形状为(N,2)的NumPy数组:
import numpy as np arr = np.array([ [3,5], [4,2], [1,6], [5,4] ])
要实现每行较大元素排在首位的需求,有两种简洁高效的向量化实现方式:
方法一:排序后翻转每行
利用np.sort对每行升序排序,再通过切片翻转得到降序排列:
result = np.sort(arr, axis=1)[:, ::-1]
执行后result的结果为:
array([[5, 3], [4, 2], [6, 1], [5, 4]])
方法二:拼接每行的最大值与最小值
直接提取每行的最大值和最小值,按列拼接成新数组:
max_vals = np.max(arr, axis=1, keepdims=True) min_vals = np.min(arr, axis=1, keepdims=True) result = np.concatenate([max_vals, min_vals], axis=1)
该方法同样能得到与方法一完全一致的结果,且逻辑更直观。
两种方法均为NumPy原生向量化操作,无需循环,处理大规模数组时效率优异。
内容的提问来源于stack exchange,提问作者sten
相关产品推荐
相关产品推荐

