9

我有以下 numpy 矩阵,我想根据第三列值按升序排序。

[[  3.05706500e+06   4.98000000e+01  -2.62500070e+01  -9.38135544e+01]
 [  3.05706600e+06   4.98000000e+01  -3.00000056e+01  -9.38135544e+01]
 [  3.05706700e+06   4.98000000e+01  -3.37500042e+01  -9.38135544e+01]
 [  3.05706800e+06   4.98000000e+01  -3.75000028e+01  -9.38135544e+01]]

这是我真正想要的矩阵。

[[  3.05706800e+06   4.98000000e+01  -3.75000028e+01  -9.38135544e+01]
 [  3.05706700e+06   4.98000000e+01  -3.37500042e+01  -9.38135544e+01]
 [  3.05706600e+06   4.98000000e+01  -3.00000056e+01  -9.38135544e+01]
 [  3.05706500e+06   4.98000000e+01  -2.62500070e+01  -9.38135544e+01]]

我如何只使用 numpy 来做到这一点?任何帮助,将不胜感激。谢谢!

4

1 回答 1

19

给定你的数组

>>> arr
array([[  3.05706500e+06,   4.98000000e+01,  -2.62500070e+01,
         -9.38135544e+01],
       [  3.05706600e+06,   4.98000000e+01,  -3.00000056e+01,
         -9.38135544e+01],
       [  3.05706700e+06,   4.98000000e+01,  -3.37500042e+01,
         -9.38135544e+01],
       [  3.05706800e+06,   4.98000000e+01,  -3.75000028e+01,
         -9.38135544e+01]])

您可以简单地使用带有axis = 0的numpy.sort来根据需要对其进行排序

>>> numpy.sort(arr,axis=0)
array([[  3.05706500e+06,   4.98000000e+01,  -3.75000028e+01,
         -9.38135544e+01],
       [  3.05706600e+06,   4.98000000e+01,  -3.37500042e+01,
         -9.38135544e+01],
       [  3.05706700e+06,   4.98000000e+01,  -3.00000056e+01,
         -9.38135544e+01],
       [  3.05706800e+06,   4.98000000e+01,  -2.62500070e+01,
         -9.38135544e+01]])
>>> 

我相信我之前的回答是错误的,因为我误解了这个问题。这里是正确答案

>>> arr[arr[:,2].argsort()]
array([[  3.05706800e+06,   4.98000000e+01,  -3.75000028e+01,
         -9.38135544e+01],
       [  3.05706700e+06,   4.98000000e+01,  -3.37500042e+01,
         -9.38135544e+01],
       [  3.05706600e+06,   4.98000000e+01,  -3.00000056e+01,
         -9.38135544e+01],
       [  3.05706500e+06,   4.98000000e+01,  -2.62500070e+01,
         -9.38135544e+01]])
>>> 
于 2012-04-09T19:27:12.870 回答