Python TypeError:列表索引应为整数/切片而非列表(numpy数组重组场景)
问题:按数组第二列值排序列表中的NumPy数组
我有一个包含不同形状NumPy数组的列表Ii0,想要根据数组第二列(j值)递增的顺序重新排列每个数组,但运行代码时出现错误。
原代码
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]])] order = [k[:,1].argsort() for k in Ii0] print(order) Ii01 = Ii0[order] print("Ii01 =",[Ii01])
报错信息
in <module> Ii01 = Ii0[order] TypeError: list indices must be integers or slices, not list
错误原因
Ii0是Python普通列表,不能直接用另一个列表order作为索引。order中的每个元素是对应Ii0里数组的排序索引数组,需要逐个对每个数组应用索引。
修正后的代码
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]])] # 生成每个数组按第二列排序的索引数组 order = [k[:,1].argsort() for k in Ii0] # 逐个对数组应用排序索引 Ii01 = [k[o] for k, o in zip(Ii0, order)] print("Ii01 =", Ii01)
预期输出
[array([[0, 1],[0, 2],[1, 3],[4,3],[2, 4]]), array([[0, 1],[0, 2],[1, 3],[4,3],[3,4],[2, 5]])]
内容的提问来源于stack exchange,提问作者Klimt865
相关产品推荐
相关产品推荐

