#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
.