Как я могу отсортировать список, включая векторы?

У меня есть список, включающий несколько точек в двух измерениях. например

List=[[270;-570] [180;-510] [-180;-67.5]]

Я хочу отсортировать по элементу один

List=[[-180;-67.5] [180;-510] [270;-570]]

когда я использую функцию сортировки, код дает мне этот список

-180.0   180.0  270.0
-570.0  -510.0  -67.5

Как мне получить список =[[-180;-67,5] [180;-510] [270;-570]]

Пожалуйста, помогите мне. Спасибо за вашу помощь.

0 ответов

Вместо того, чтобы использовать indexin для "обратного поиска" каждого отсортированного элемента, как предлагает пользователь 172056, я бы порекомендовал создать перестановку сортировки для первой строки и индексировать ее так:

julia> l[:, sortperm(view(l, 1, :))]
2×3 Array{Float64,2}:
 -180.0   180.0   270.0
  -67.5  -510.0  -570.0

Если вы также планируете сортировать по второму ряду позже, может также потребоваться указать стабильный алгоритм сортировки (sortperm по умолчанию кажется нестабильным):

julia> l[:, sortperm(view(l, 1, :), alg = Base.Sort.DEFAULT_STABLE)]
2×3 Array{Float64,2}:
 -180.0   180.0   270.0
  -67.5  -510.0  -570.0

Итак, у вас есть объект Listкоторый на самом деле является двумерным массивом с 2 строками и несколькими столбцами, я полагаю. Каждый столбец представляет пару координат, и вы хотите отсортировать List на основе, например, отсортированного первого ряда координат. Я бы сделал это так:

SortRow=List[1,:]
3-element Array{Float64,1}:
270.0
180.0
-180.0

Сортировать этот элемент, получить индексы с indexin встроенная функция:

IndexRow=indexin(sort(SortRow),SortRow)
3-element Array{Union{Nothing, Int64},1}:
3
2
1

Теперь реконструируем List объект:

SortedPoints = List[:,IndexRow]
2×3 Array{Float64,2}:
-180.0   180.0   270.0
-67.5  -510.0  -570.0
Другие вопросы по тегам