代码之家  ›  专栏  ›  技术社区  ›  Roman

如何对包含numpy数组的元组列表进行排序?

  •  3
  • Roman  · 技术社区  · 7 年前

    首先,这是不起作用的代码:

    ls = [(1.0,np.array([3.0, 4.0])), (1.0,np.array([3.0, 4.1])), (3.0,np.array([2.0, 1.0]))]
    ls.sort()
    

    如你所见,我有一个元组列表( ls ). 每个元组的第一个元素是一个浮点数。我试着按 ls.sort() . 在大多数情况下,它运行良好。然而,有时(如上面的示例中)我有元组,它们的第一个元素的值相同。在本例中,python尝试使用元组的第二个元素来排序元组,但它不起作用,因为在元组的第二个位置,我有numpy数组。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Eric    7 年前

    要么告诉python只对第一项进行排序

    sorted(ls, key=lambda t: t[0])
    

    或者将整个内容转换为结构化numpy数组,并要求numpy对其进行排序

    ls_arr = np.array(ls, dtype=[('my_val', float), ('my_arr', float, 2)])
    ls_arr.sort()
    

        2
  •  1
  •   Anton vBR    7 年前

    可能使用关键参数。这是你想要的吗?

    import numpy as np
    ls = [(1.0,np.array([3.0, 4.0])), (1.0,np.array([3.0, 4.1])), (3.0,np.array([2.0, 1.0]))]
    ls.sort(key=lambda x: x[0])