Python NumPy中如何按数组排序结果同步调整另一对应数组顺序
实现方法
不要单独用np.sort对A排序,np.sort仅返回排序后的数值,不会保留元素原位置的映射关系。要生成和A排序顺序完全匹配的B1,核心逻辑如下:
- 用
np.argsort获取A沿axis=1排序时的元素原位置索引 - 用这个索引对B做同轴向的取值,就能得到顺序完全对齐的B1
推荐用np.take_along_axis做索引取值,会自动处理维度匹配问题,不需要手动写广播逻辑。
可运行代码
import numpy as np A = np.array([[[0, 1],[0, 2],[1, 3],[2, 3],[2, 5],[3, 4],[3, 6],[4, 7],[5, 6],[6, 7]]]) B = np.array([[[10],[20],[30],[40],[50],[60],[70],[80],[90],[100]]]) # 获取沿axis=1排序的位置索引 sort_indices = np.argsort(A, axis=1) # 沿相同轴取A、B的对应元素,因为B最后一维长度为1,索引最后一维切1个长度匹配维度即可 A1 = np.take_along_axis(A, sort_indices, axis=1) B1 = np.take_along_axis(B, sort_indices[..., :1], axis=1)
结果验证
运行代码后得到的B1和期望输出完全一致:
>>> print(B1) array([[[ 10], [ 20], [ 30], [ 40], [ 60], [ 50], [ 70], [ 90], [ 80], [100]]])
这个方法对任意维度的同形状对齐数组都通用,只要修改
axis参数为你需要排序的轴,调整索引切片匹配数组最后一维长度即可,不需要写循环处理。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

