Searching a huge array with a for loop - How to increase speed?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ben
el 10 de Nov. de 2018
Editada: Bruno Luong
el 10 de Nov. de 2018
Hi!
I have a humongous datetime array containing upwards of a hundred million entries of the timestamps of financial market quote updates. What I want to do is count the number of updates falling into each hour of trading. I'm doing it as follows which works but is glacially slow.
t = '20130102 00:00:00:000'; %start date
te = '20170731 23:00:00:000'; %end date
kl = datetime(t, 'InputFormat','yyyyMMdd HH:mm:ss:SSS'):hours(1):datetime(te, 'InputFormat','yyyyMMdd HH:mm:ss:SSS'); %creating an array with each time interval that is to be searched
ys = zeros(length(kl)+1,1); %preassigning the array that will contain the solutions
c = 1; %variable counting through search intervals
for k=1:length(kl);
ys(c) = sum(isbetween(Time,kl(c),kl(c)+hours(1))); %counting all entries between a one hour period an a specific day and saving the it in variable ys
c=c+1
end
So essentially I'm making matlab search the huge array 'Time' and count all the entries within all one hour periods.
Is there anyway to make my code more efficient to speed up the process? One solution would be to just make Matlab go through the Database 23 times (for each trading hour) instead of 40000 times but I can't figure out how to do that.
4 comentarios
madhan ravi
el 10 de Nov. de 2018
are you sure its working? I'm trying to run your code but facing errors
Respuesta aceptada
Bruno Luong
el 10 de Nov. de 2018
Editada: Bruno Luong
el 10 de Nov. de 2018
ts = datenum('20130102 00:00:00:000', 'yyyymmdd HH:MM:SS:FFF');
te = datenum('20170731 23:00:00:000', 'yyyymmdd HH:MM:SS:FFF');
t = datenum(Time, 'yyyymmdd HH:MM:SS:FFF');
ys = histcounts(t,ts:1/24:te);
4 comentarios
Steven Lord
el 10 de Nov. de 2018
If you were using release R2017a or later you wouldn't need to convert to serial date numbers. In R2017a we added support for directly calling histcounts on datetime and duration arrays. As part of that support you could directly say 'hour' as the BinMethod.
histcounts(yourDatetimeArray, 'BinMethod', 'hour')
Más respuestas (0)
Ver también
Categorías
Más información sobre Dates and Time en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!