Повышение эффективности цикла, который использует функцию datenum? - PullRequest
3 голосов
/ 07 декабря 2008

Следующий цикл занимает около 700 секунд для запуска в октаве и 22 секунды для запуска в matlab, когда матрица DJI имеет 21000 строк. Как я могу увеличить эффективность этого?

for i=1:length(DJI)
DJI2(i,1)=datenum(char(DJI(i,2)),'yyyy-mm-dd');
end

Ответы [ 2 ]

2 голосов
/ 09 декабря 2008

Я заменил цикл следующим и получил увеличение скорости как минимум на порядок.

DJI2(:,1) = reshape(datenum(strvcat(DJI(:,2)(:)), length(DJI(:,2)),'yyyy-mm-dd'));
2 голосов
/ 08 декабря 2008

Вы помните, чтобы заранее выделить DJI2?

Что еще более важно, вам не нужен цикл вообще. datenum работает с массивами. Попробуй это:

DJI2=datenum(char(DJI(:,2)),'yyyy-mm-dd');
...