如何按行对数组进行排序?

时间:2015-06-22 18:32:41

标签: python arrays sorting numpy

我有一个下面给出的表格的数组A

A = [[ 4  3  2  1]
     [ 8  7  6  5]
     [12 11 10  9]
     [16 15 14 13]]

我想按行对此数组进行排序。所需的输出是:

A = [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]
     [13 14 15 16]]

我尝试使用以下代码(但它不起作用):

import numpy as np
A = np.array([[4, 3, 2, 1], [8, 7, 6, 5], [12, 11, 10, 9], [16, 15, 14, 13]])
print A[np.lexsort(A, axis = 1)]

如何按行对此数组进行排序?

4 个答案:

答案 0 :(得分:3)

你不清楚“按行排序”是什么意思,但你似乎想要对数组的元素进行排序,你可以通过迭代它并对每个元素进行排序来对其进行排序:

for i in A: i.sort()

如果你还想对外部数组本身进行排序,那么,好吧,对它进行排序:

A.sort()

答案 1 :(得分:1)

Numpy的sort有一个axis参数,可用于指定哪个轴已排序。

import numpy as np
A = np.array([[4, 3, 2, 1], [8, 7, 6, 5], [12, 11, 10, 9], [16, 15, 14, 13]])

A.sort(axis=1)

给出:

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

sort默认使用axis作为数组的最后一个轴,所以这里它是1,所以你真的不需要指定axis=1在这种情况下。

答案 2 :(得分:0)

A = [[ 4,  3,  2,  1],
     [12, 11, 10,  9],
     [ 8,  7,  6,  5],
     [16, 15, 14, 13]]
for i in A:
    i.sort()

A.sort()
print A

我假设逐行意味着你也要对外部列表进行排序

答案 3 :(得分:0)

两个不同的答案,都是单行,如下:

sorted_A_1 = sorted(sorted(i) for i in A)
sorted_A_2 = [sorted(i) for i in sorted(A)]

虽然您可能只想修改现有列表,但这些列表都会生成新列表。第一个管道将A中的每个列表排序到排序函数的结果,第二个只是列表理解。

此外,虽然这些可能不比已经发布的答案更清楚,但我个人认为看到解决特定问题的不同方法是有帮助的!