2015-06-22 6 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

@ Yuanchopanza определенно. но как вы можете ожидать, что там пропадают запятые, а не скобки? – Wolf

+1

«массив» имеет только * одну строку, не так ли? – Wolf

ответ

3

Не ясно, что вы подразумеваете под «сортировка по строкам», но вы, кажется, хотят, чтобы отсортировать элементы массива, которые вы можете сделать итерируя над ним и сортирует каждый элемент:

for i in A: i.sort() 

Если вы хотите отсортировать сам внешний массив, то, ну, разбирайтесь:

A.sort() 
+1

Я бы не добавил этот (запутанный) комментарий о внешнем массиве. Заявитель уже добавил ожидаемое поведение. – Wolf

+0

@ Вольф Я думаю, что ОП не указано требований. – 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

Что такое * лямбда-магия * хорошо? – Wolf

+0

@ Вольф - извините, я не знаю об этом :) – k4vin

+0

@ Вольф К слову, я не являюсь представителем охоты, я случайно поставил тот же ответ по совпадению. Я должен удалить его сейчас. пожалуйста, просветите меня, я действительно новичок в SO. – 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 в этом случае ,

Смежные вопросы