You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何复用Ii0的排序规则重排Iv0列表?

同步重排两个numpy数组列表(复用同一排序规则)

我有两个包含numpy数组的列表Ii0和Iv0,已经通过argsort()对Ii0中的元素按数组第二列重新排序得到Ii01,现在需要用完全相同的排序顺序对Iv0进行重排,得到符合预期的Iv01。

当前错误代码

import numpy as np
Ii0 = [np.array([[0, 1],[0, 2],[1, 3],[2, 4],[4,3]]),
       np.array([[0, 1],[0, 2],[1, 3],[2, 5],[4,3],[3,4]])]

Iv0 = [np.array([[10],[20],[30],[40],[50]]),
        np.array([[25],[38],[41],[97],[65],[54]])]

Ii01 = [i[i[:,1].argsort()] for i in Ii0]

Iv01 = [i[i[:,0].argsort()] for i in Iv0]
print("Iv01 =",Iv01)

当前输出

Iv01 = [array([[10],
       [20],
       [30],
       [40],
       [50]]), array([[25],
       [38],
       [41],
       [54],
       [65],
       [97]])]

预期输出

Iv01 = [array([[10],
               [20],
               [30],
               [50],
               [40]]),array([[25],
               [38],
               [41],
               [65],
               [54],
               [97]])]

解决方案

核心是复用Ii0排序时生成的索引,而非用Iv0自身元素生成索引,步骤如下:

  1. 为Ii0中每个数组生成基于第二列的排序索引
  2. 将该索引分别应用到Ii0和Iv0的对应数组,保证排序顺序一致

修正后的代码

import numpy as np

Ii0 = [np.array([[0, 1],[0, 2],[1, 3],[2, 4],[4,3]]),
       np.array([[0, 1],[0, 2],[1, 3],[2, 5],[4,3],[3,4]])]

Iv0 = [np.array([[10],[20],[30],[40],[50]]),
        np.array([[25],[38],[41],[97],[65],[54]])]

# 生成Ii0每个数组对应的排序索引(基于第二列)
sort_indices = [arr[:, 1].argsort() for arr in Ii0]

# 用索引重排Ii0得到Ii01
Ii01 = [arr[idx] for arr, idx in zip(Ii0, sort_indices)]
# 用相同索引重排Iv0得到Iv01
Iv01 = [val_arr[idx] for val_arr, idx in zip(Iv0, sort_indices)]

print("Iv01 =", Iv01)

代码说明

原错误在于Iv01的生成逻辑是用Iv0自身第一列的值排序,和Ii0的排序规则无关。通过先提取Ii0的排序索引列表sort_indices,再将其应用到Iv0对应数组上,就能确保两个列表的元素排序顺序完全同步,最终得到符合预期的Iv01。

内容的提问来源于stack exchange,提问作者Klimt865

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:36:08