Как отсортировать массив, сохраняя порядок строк индекса, соответствующий отсортированной строке?

#matlab #sorting

#matlab #сортировка

Вопрос:

Самый простой способ — показать вам через Excel:

Несортированный:

Необходимо отсортировать второй столбец, сохраняя соответствие первого

Отсортировано:

Второй столбец отсортирован, первый столбец следует за вторым столбцом

Этот пример с Excel, но мне нужно было бы сделать то же самое в matlab с тысячами записей (с 2 строками, если возможно).

Вот мой код на данный момент:

 %At are random numbers between 0 and 2, 6000 entries.

    [sorted]=sort(At);
    max=sorted(end);
    min=sorted(1);
%need the position of the min and max
  

Но сортируется только 1 строка, и во второй строке нет чисел и индекса. Как бы я добавил один и сохранил его после моей первой строки?

Спасибо!

Комментарии:

1. Согласно документации для sort , существует второй вывод индексов.

2. min и работать таким же образом: [value, indx] = min(...) . Единственное, что нужно иметь в виду, это то, что по умолчанию они работают со столбцами, а не со строками.

3. Спасибо, excaza… Я пропустил это первые несколько раз!

Ответ №1:

У меня нет доступа к Matlab, но попробуйте

 [sorted, I] = sort(At);
  

Где я буду соответствующим вектором индексов At. Подробности см. в документации Matlab.

Ответ №2:

Здесь у вас есть несколько вариантов. Для простого случая, когда вам просто нужны индексы, четвертая форма, sort перечисленная в документах, уже делает это за вас:

 [sorted, indices] = sort(At);
  

В этом случае At(indices) это то же самое, что sorted .

Если ваши «индексы» на самом деле являются другим отдельным массивом, вы можете использовать sortrows :

 toSort = [At(:) some_other_array(:)];
sorted = sortrows(toSort);
  

В этом случае sorted(:, 1) будет sorted массив из первого примера, а sorted(:, 2) будет другой массив, отсортированный в соответствии с At .

sortrows принимает второй параметр, который указывает вам столбец для сортировки. Это может быть один столбец или список столбцов, как в Excel. Он также может предоставлять второй выходной аргумент, индексы, как обычный sort .