如何根据另一个数组对列表进行排序以在python中生成新数组

2024-06-17 11:32:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个长度为n的列表:

labels = ['a', 'b', 'c', 'd']

以及大小为m*n的数组,如:

values = array([[0. , 0.6, 0.3, 0.1],
                [0.5, 0.1, 0.1, 0.3],
                [0.1, 0.2, 0.3, 0.4]])

我希望按每行值对标签进行排序,并生成一个新的m*n数组,如:

labels_new = [['a', 'd', 'c', 'b'],
                ['b', 'c', 'd', 'a'],
                ['a', 'b', 'c', 'd']]

有什么简单的方法可以做到这一点吗


Tags: 方法列表newlabels排序标签数组array
2条回答

您可以使用^{}函数。只需使用numpy数组保存标签,然后使用简单的索引:

In [6]: labels = np.array(['a', 'b', 'c', 'd'])                                                                                                                                                             

In [7]: labels[np.argsort(values)]                                                                                                                                                                          
Out[7]: 
array([['a', 'd', 'c', 'b'],
       ['b', 'c', 'd', 'a'],
       ['a', 'b', 'c', 'd']], dtype='<U1')

函数argsort按srted顺序排列数组并返回相应的索引数组。该数组可用于重新排列标签:

[array(labels)[np.argsort(v)].tolist() for v in values]
#[['a', 'd', 'c', 'b'], 
# ['b', 'c', 'd', 'a'], 
# ['a', 'b', 'c', 'd']]

相关问题 更多 >