如何排序包含numpy数组的元组列表?
问题描述:
首先,这是行不通的代码:如何排序包含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数组。
如何通过忽略元组的第二个元素来排序列表?如果第一个元素是相同的,我不关心排序(它可以是原始排序,或随机)。
答
可能使用关键参数。这是你想要的吗?
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])
答
要么告诉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()
,第二个选项只有在数组长度相同的情况下才有效。