如何在Python中按第二列排序二维数组(numpy.ndarray)?

32 投票
2 回答
90361 浏览
提问于 2025-04-18 00:13

我正在把我的所有代码转换成Python。我想对一个有两列的数组进行排序,排序的依据是第二列,要求按升序排列。然后我需要把第一列的数据从第一行到第100行进行求和。我用了“Data.sort(axis=1)”,但这并没有效果。有没有人知道怎么解决这个问题?

2 个回答

5

sorted(Data, key=lambda row: row[1]) 这个代码可以做到这一点。

64

使用 .argsort(),它会返回一个 numpy.array,这个数组里面是可以用来排序的索引。你可以把它当作一个函数来调用,也可以把它当作你数组的方法来使用。例如,假设你有

import numpy as np

arr = np.array([[-0.30565392, -0.96605562],
                [ 0.85331367, -2.62963495],
                [ 0.87839643, -0.28283675],
                [ 0.72676698,  0.93213482],
                [-0.52007354,  0.27752806],
                [-0.08701666,  0.22764316],
                [-1.78897817,  0.50737573],
                [ 0.62260038, -1.96012161],
                [-1.98231706,  0.36523876],
                [-1.07587382, -2.3022289 ]])

现在你可以在想要排序的那一列上调用 .argsort(),它会给你一个行索引的数组,这个数组可以用来对你原来的数组进行排序。

>>> arr[arr[:, 1].argsort()]
array([[ 0.85331367, -2.62963495],
       [-1.07587382, -2.3022289 ],
       [ 0.62260038, -1.96012161],
       [-0.30565392, -0.96605562],
       [ 0.87839643, -0.28283675],
       [-0.08701666,  0.22764316],
       [-0.52007354,  0.27752806],
       [-1.98231706,  0.36523876],
       [-1.78897817,  0.50737573],
       [ 0.72676698,  0.93213482]])

你也可以用 numpy.argsort() 来实现同样的功能。

>>> arr[np.argsort(arr[:, 1])]
array([[ 0.85331367, -2.62963495],
       [-1.07587382, -2.3022289 ],
       [ 0.62260038, -1.96012161],
       [-0.30565392, -0.96605562],
       [ 0.87839643, -0.28283675],
       [-0.08701666,  0.22764316],
       [-0.52007354,  0.27752806],
       [-1.98231706,  0.36523876],
       [-1.78897817,  0.50737573],
       [ 0.72676698,  0.93213482]])

撰写回答