按升序对numpy矩阵行值进行排序

prr*_*rao 8 python arrays numpy matrix

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

[[  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]]
Run Code Online (Sandbox Code Playgroud)

这是我真正想要的矩阵.

[[  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]]
Run Code Online (Sandbox Code Playgroud)

我怎么用numpy做到这一点?任何帮助,将不胜感激.谢谢!

Abh*_*jit 17

鉴于你的阵列

>>> 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]])
Run Code Online (Sandbox Code Playgroud)

你可以简单地使用轴= 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]])
>>> 
Run Code Online (Sandbox Code Playgroud)

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

>>> 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]])
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 您正在对每列进行排序,而不是针对第3列.输出是正确的,但我并不认为这是OP正在寻找的方法. (2认同)