我有一个包含N = 250000
行和M = 10
列的矩阵。
我想对矩阵进行排序以减少第一列的值,
所以我写道:
matrix=np.loadtxt("matrix.dat")
np.sort(matrix)
matrix=matrix[::-1]
但np.sort
不起作用。实际上,一旦在排序后打印了值,我就会找到相同的输入矩阵。
任何人都知道如何解决这个问题?
非常感谢你
答案 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]