【问题标题】:How to sort a list of tuples that contain numpy array?如何对包含 numpy 数组的元组列表进行排序?
【发布时间】:2018-03-15 11:50:04
【问题描述】:

首先,这是行不通的代码:

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 数组。

如何通过忽略元组的第二个元素来对列表进行排序?如果第一个元素相同,我不关心排序(可以是原始排序,也可以是随机的)。

【问题讨论】:

    标签: python arrays sorting numpy


    【解决方案1】:

    要么告诉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】:

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

      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])
      

      【讨论】:

        猜你喜欢
        • 2010-10-29
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 2015-01-03
        • 1970-01-01
        • 2021-09-21
        • 1970-01-01
        • 2020-01-18
        相关资源
        最近更新 更多