Why slow conversion from date in Matlab time to day of year?

I have a vector of dates in Matlab time convention which I need to convert to day of the year. The following code is slow (9 seconds) even though it is using builtin Matlab functions. What do you recommend to speed it up?
timeGmt = datenum(1996,1,1):1/24:now; % Long vector of dates covering many years
timeGmt = timeGmt'; % Change from row vector to column vector for compatibility in next line
yearDay = timeGmt - ...
datenum(str2num(datestr(timeGmt, 10)), 1, 1) ... % Subtract off first day of this year
+ 1; % Add a day so that first day of year is day 1

 Respuesta aceptada

James Tursa
James Tursa el 18 de Mayo de 2015
Editada: James Tursa el 18 de Mayo de 2015
Try this variation using datevec instead of datestr:
vecGmt = datevec(floor(timeGmt)); % Set hms to 0's using floor
vecGmt(:,2:3) = 1; % Set month and day to Jan 1
yearDay = timeGmt - datenum(vecGmt) + 1;

3 comentarios

K E
K E el 18 de Mayo de 2015
Awesome! 0.15s instead of 8.8s on my machine!
Try the edited version using floor instead of setting the hms to 0's directly.
K E
K E el 18 de Mayo de 2015
0.04s. very nice.

Iniciar sesión para comentar.

Más respuestas (1)

Peter Perkins
Peter Perkins el 18 de Mayo de 2015
Editada: Walter Roberson el 19 de Mayo de 2015
In R2014b or later, use datetime. On a not particularly fast Win7 machine:
>> timeGmt = '1-Jan-1996':hours(1):datetime('now');
>> tic, dayOfYear = day(timeGmt,'dayofyear'); toc
Elapsed time is 0.041145 seconds.

2 comentarios

K E
K E el 26 de Mayo de 2015
Editada: K E el 26 de Mayo de 2015
I don't seem to have the function day.m but it may be part of the Financial toolbox .
If you have R2014b or later, you have the day function. It is a method of the datetime class, which was introduced in R2014b.

Iniciar sesión para comentar.

Categorías

Etiquetas

Preguntada:

K E
el 18 de Mayo de 2015

Comentada:

el 3 de Jun. de 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by