#matlab
#matlab
Вопрос:
Я пытаюсь векторизовать свой код Matlab, но у меня возникают проблемы при попытке упорядочить массив datevec так, чтобы каждый год отображался один и тот же день.
Например, у меня есть массив datevec для июня:
1900 6 1 0 0 0
1900 6 2 0 0 0
1900 6 3 0 0 0
...
2013 6 30 0 0 0
который содержит каждый день в июне с 1900-2013. Есть ли способ упорядочить массив datevec по годам, сохраняя при этом правильные даты? Мой конечный результат будет выглядеть следующим образом:
1900 6 1 0 0 0
1901 6 1 0 0 0
1902 6 1 0 0 0
...
2013 6 30 0 0 0
Я пытался использовать
june(sort(june(:,3)),:)
который возвращает даты в правильном организованном виде, однако столбцы year неверны.
Заранее спасибо всем!
Ответ №1:
Я все еще работаю над тем, как сделать это без цикла, но это (я думаю) отвечает на вопрос:
[~,idx] = sort(june(:,3));
sorted_table = zeros(size(june));
for ii = 1:length(idx)
sorted_table(ii,:) = june(idx(ii),:);
end
РЕДАКТИРОВАТЬ: только что обнаружил встроенный sortrows
:
sorted_table = sortrows(june,[3 1])
Сортирует по столбцу 3, а затем по столбцу 1
Комментарии:
1. Я постоянно удивляюсь, как я могу замалчивать эти функции. Спасибо!