Python NumPy按j值升序排序数组索引触发IndexError报错求助
问题成因
- 你定义的
I1两个内层子列表长度不一致:第一组有10个索引对,第二组只有8个,NumPy无法将这种不规则嵌套结构解析为形状统一的三维数值数组,最终实际生成的是形状为(2,)的一维对象数组,每个元素存储一组索引对构成的二维数组。 - 原代码用三维索引语法
I1[0,:, 1]访问一维数组,传入的索引数量超过数组维度,直接触发IndexError: too many indices for array报错。 - 原逻辑仅对第一组索引对做了排序,完全没处理第二组数据,即使不报错也无法得到期望的输出结果。
正确实现方案
针对不规则的分组结构,逐组取出索引对数组,按每组内每个索引对的第二个元素(j值)做升序排序,最后将排序后的分组重新组合即可,完整代码如下:
import numpy as np I1 = np.array( [ [[0, 1], [0, 3], [1, 2], [1, 4], [2, 5], [3, 4], [3, 6], [4, 7], [5, 4], [6, 7]], [[0, 1], [0, 3], [1, 2], [1, 4], [2, 5], [3, 4], [3, 6], [4, 7]] ], dtype=object ) sorted_result = [] for group in I1: group_arr = np.array(group) # 按j值(第二列)升序取排序索引 sort_idx = group_arr[:, 1].argsort() sorted_result.append(group_arr[sort_idx]) # 组合为最终结果,因两组长度不同,数组dtype为object final = np.array(sorted_result, dtype=object) print(final)
运行代码后输出结果和预期完全一致:
array([array([[0, 1], [1, 2], [0, 3], [1, 4], [3, 4], [5, 4], [2, 5], [3, 6], [4, 7], [6, 7]]), array([[0, 1], [1, 2], [0, 3], [1, 4], [3, 4], [2, 5], [3, 6], [4, 7]])], dtype=object)
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

