如何通过减少Python和numpy中第一列的值来对矩阵的行进行排序?

时间:2016-11-04 10:08:46

标签: python sorting numpy matrix

我有一个包含N = 250000行和M = 10列的矩阵。 我想对矩阵进行排序以减少第一列的值, 所以我写道:

matrix=np.loadtxt("matrix.dat")

np.sort(matrix)

matrix=matrix[::-1]

np.sort不起作用。实际上,一旦在排序后打印了值,我就会找到相同的输入矩阵。 任何人都知道如何解决这个问题? 非常感谢你

2 个答案:

答案 0 :(得分:1)

np.sort()不会对您的矩阵进行排序,您必须将已排序的矩阵分配给上一个变量,或使用array.sort(axis=0)方法进行就地排序。如果您希望按降序排列,请反转结果。

演示:

In [33]: arr = np.random.rand(5, 4)

In [34]: arr
Out[34]: 
array([[ 0.80270779,  0.14277011,  0.01316072,  0.67149683],
       [ 0.16252499,  0.9969757 ,  0.14759736,  0.24212889],
       [ 0.49493771,  0.51692399,  0.17731137,  0.40797518],
       [ 0.20700147,  0.13279386,  0.2464658 ,  0.9730963 ],
       [ 0.26145694,  0.23410809,  0.78049016,  0.45821089]])

In [35]: arr.sort(0) # or arr.sort(axis=0, kind='mergesort')

In [36]: arr
Out[36]: 
array([[ 0.16252499,  0.13279386,  0.01316072,  0.24212889],
       [ 0.20700147,  0.14277011,  0.14759736,  0.40797518],
       [ 0.26145694,  0.23410809,  0.17731137,  0.45821089],
       [ 0.49493771,  0.51692399,  0.2464658 ,  0.67149683],
       [ 0.80270779,  0.9969757 ,  0.78049016,  0.9730963 ]])

In [37]: arr[::-1]
Out[37]: 
array([[ 0.80270779,  0.9969757 ,  0.78049016,  0.9730963 ],
       [ 0.49493771,  0.51692399,  0.2464658 ,  0.67149683],
       [ 0.26145694,  0.23410809,  0.17731137,  0.45821089],
       [ 0.20700147,  0.14277011,  0.14759736,  0.40797518],
       [ 0.16252499,  0.13279386,  0.01316072,  0.24212889]])

答案 1 :(得分:0)

这将对矩阵进行排序以减少第一列的值

import numpy as np

# Generate a matrix of data
matrix = np.random.rand(5,4)

# Find the ordering of the first column (in increasing order)
ind = np.argsort(matrix[:,0])

# Switch the ordering (so it's decreasing order)
rind = ind[::-1]

# Return the matrix with rows in the specified order
matrix = matrix[rind]