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

时间:2017-10-04 07:03:00

标签: python arrays sorting numpy

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

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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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()

第二个选项仅在数组的长度始终相同时才有效。