如何通过二维索引数组对二维numpy数组的每一行进行排序?
用二维索引数组重排Numpy二维数组每一行的方法
你可以通过两种Numpy原生方法实现需求,代码示例如下:
首先完成数组初始化(修正了示例中遗漏的np.array括号和数组元素逗号):
import numpy as np arr = np.array([[10, 30, 20], [30, 20, 10]]) indices = np.array([[2, 1, 0], [2, 1, 0]])
方法1:使用np.take_along_axis(推荐)
这是Numpy 1.15.0版本之后新增的专用接口,代码最简洁不易出错:
result = np.take_along_axis(arr, indices, axis=1)
参数axis=1指定按行维度进行索引匹配。
方法2:使用高级广播索引
如果你的Numpy版本较低,可以手动构造行索引配对列索引实现:
# 构造与indices形状匹配的行索引,每一行值为对应行号 row_indices = np.arange(arr.shape[0])[:, np.newaxis] result = arr[row_indices, indices]
两种方法得到的result输出都符合预期:
[[20 30 10] [10 20 30]]
内容的提问来源于stack exchange,提问作者Никита Михалков
相关产品推荐
相关产品推荐

