2015-06-22 38 views
0

我有一个数组形式的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)] 

我怎么排序这个数组按行?

+1

你应该让你的代码在语法上有效。 – juanchopanza

+0

@ juanchopanza绝对。但你怎么能期望那里的逗号失踪,而不是括号剩余? – Wolf

+1

一个'array'只有*一个*行,对吗? – Wolf

回答

3

目前尚不清楚你的意思是“按行排序”,但你似乎想在阵列,您可以通过遍历它和排序每个元素做的元素进行排序:

for i in A: i.sort() 

如果你也想外阵列本身进行排序,然后,嗯,有点吧:

A.sort() 
+1

我不会添加关于外部数组的这个(令人困惑的)注释。提问者已经添加了预期的行为。 – Wolf

+0

@狼我觉得OP没有指定要求。 – juanchopanza

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 

我认为逐行意味着你也想排序外列表

+1

* lambda magic *有什么好处? – Wolf

+0

@狼 - 对不起,我不知道:) – k4vin

+0

@Wolf顺便说一句,我不是代表狩猎,我偶然发布了相同的答案。我现在应该删除它吗?请赐教我对于我来说真的很陌生。 – k4vin

0

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

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

虽然你可能想简单地修改现有的名单,这些都产生一个新的列表。第一个管道将A中的每个列表排序到排序函数的结果,第二个只是列表理解。另外,虽然这些可能并不比已经发布的答案更清楚,但我个人认为,看到解决给定问题的不同方法是有帮助的!

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