【问题标题】:How to sort numpy arrays of a list based on the averages of columns如何根据列的平均值对列表的numpy数组进行排序
【发布时间】:2021-07-22 21:36:38
【问题描述】:

我有一个 numpy 数组列表,想先对每个数组进行排序,然后对列表中的整个数组进行排序。第一步对我来说很清楚。这是我的数据:

unsorted=[np.array([[2.5, 6., 5.1],\
                    [3.5, 7., 0.1],\
                    [2.5, 7., 0.],\
                    [3.5, 6., 0.1]]),\
          np.array([[2.5, 6., 1.],\
                    [1.5, 7., 5.2]]),\
          np.array([[1.5, 7., 0.2],\
                    [2.5, 7., 1.2]])]

首先,我使用以下代码根据第一列和第二列对每个数组进行排序:

sorted_arr=[]    
for i in unsorted:
    i=i[np.lexsort((i[:,0],i[:,1]))]
    sorted_arr.append(i)

然后,我还想对列表中的数组进行排序。我想根据第一列和第二列的平均值对它们进行排序。对于第一列和第二列的第一个数组平均值是:3.6.5。对于第二个数组,它是 2.6.5。最后一个数组是2.7。我想首先根据第二列的平均值对数组进行排序,然后是第一列。我的意思是我希望我的最终结果是:

sorted_arr=[array([[2.5, 6. , 1. ],
                   [1.5, 7. , 5.2]]),
            array([[1.5, 7. , 0.2],
                   [2.5, 7. , 1.2]]),
            array([[2.5, 6. , 5.1],
                   [3.5, 6. , 0.1],
                   [2.5, 7. , 0. ],
                   [3.5, 7. , 0.1]])]

我非常感谢在 python 中这样做的任何帮助。

【问题讨论】:

    标签: python arrays numpy sorting


    【解决方案1】:

    通过您的sorted_arr,您可以:

    sorted(sorted_arr, key=lambda x: tuple(x[:,:2].mean(0)))
    

    【讨论】:

    • 那不是先按第一列的平均数排序,再按第二列的平均数排序吗?
    • @BioGeek 确实是,但它符合 OP 的预期输出。如果它采用其他方式,它将与输出不匹配。我认为OP需要在这里澄清。
    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2013-12-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多