Python Numpy矩阵逐行递增排序

2024-04-18 01:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我四处寻找,试图找到一个似乎很简单的问题的解决办法,但却一无所获。问题是根据矩阵的列,逐步地对矩阵进行排序。所以,如果我有一个纽比矩阵:

import numpy as np
X=np.matrix([[0,0,1,2],[0,0,1,1],[0,0,0,4],[0,0,0,3],[0,1,2,5]])
print(X)
[[0 0 1 2]
 [0 0 1 1]
 [0 0 0 4]
 [0 0 0 3]
 [0 1 2 5]]

我想根据第一列进行排序,然后是第二列、第三列,依此类推,得到如下结果:

^{pr2}$

虽然我认为可以通过命名列来对矩阵进行排序,但我更希望有一种排序方法,它不太依赖于矩阵的大小。如果重要的话,我使用的是python3.4。

任何帮助将不胜感激!


Tags: 方法importnumpy排序asnp矩阵命名
2条回答

它不会特别快,但您可以始终将行转换为元组,然后使用Python的sort:

np.matrix(sorted(map(tuple, X.A)))

您也可以使用np.lexsort,如this answersomewhat related question中所建议的那样:

^{pr2}$

lexsort方法似乎更快,但您应该使用实际数据进行测试,以确保:

In [20]: X = np.matrix(np.random.randint(10, size=(100,100)))

In [21]: %timeit np.matrix(sorted(map(tuple, X.A)))
100 loops, best of 3: 2.23 ms per loop

In [22]: %timeit X[np.lexsort(X.T[::-1])]
1000 loops, best of 3: 1.22 ms per loop

这里:

data = [[0,0,1,2],[0,0,1,1],[0,0,0,4],[0,0,0,3],[0,1,2,5]]
x  = pandas.DataFrame(data)
# order of columns to sort
z = x.sort([0,1,2,3])
output = z.as_matrix()

output

^{pr2}$

相关问题 更多 >

    热门问题