Re: runs slowly?
- To: mathgroup at smc.vnet.net
- Subject: [mg122313] Re: runs slowly?
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Mon, 24 Oct 2011 05:16:03 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201110231025.GAA10587@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
t = {"14-May-10 09:58:05", {"Day", "-", "MonthNameShort", "-", "YearShort", " ", "Hour", ":", "Minute", ":", "Second"}}; tList = Table[t, {i, 100000}]; a = Timing[AbsoluteTime[#] & /@ tList;] {63.1612, Null} AbsoluteTime is taking about 6 ten thousandths of a second for each call, which doesn't seem unreasonable... but this is twenty times faster: t = {2010, 5, 14, 9, 58, 5}; tList = Table[t, {i, 100000}]; a = Timing[AbsoluteTime[#] & /@ tList;] {3.05313, Null} ...if you could have gotten dates in that format beforehand. This is ten times faster than the original: DateString[#, "MonthNameShort"] & /@ Table[{2010, i}, {i, 12}]; twelve = Dispatch@Thread[% -> Range@12]; convert = ToExpression[ StringSplit[#, {"-", " ", ":"}][[{3, 2, 1, 4, 5, 6}]] /. twelve] &; t = {"14-May-10 09:58:05", {"Day", "-", "MonthNameShort", "-", "YearShort", " ", "Hour", ":", "Minute", ":", "Second"}}; tList = Table[t, {i, 100000}]; a = Timing[AbsoluteTime@convert@First@# & /@ tList;] {6.24957, Null} You can use "convert" to change all your dates to list format, and then use AbsoluteTime only when it's needed. You REALLY don't want to store 100,000 identical copies of {"Day", "-", "MonthNameShort", "-", "YearShort", " ", "Hour", ":", "Minute", ":", "Second"}. Bobby On Sun, 23 Oct 2011 05:25:28 -0500, Robert McHugh <bob_mchugh_2000 at yahoo.com> wrote: > The following code takes over a minute to run on my machine. Is this > expected behavior? > > t = {"14-May-10 09:58:05", {"Day", "-", "MonthNameShort", "-", > "YearShort", " ", "Hour", ":", "Minute", ":", "Second"}}; > tList = Table[t, {i, 100000}]; > a = Timing[AbsoluteTime[#] & /@ tList ;] > > For reference, an operation like the following takes less than a tenth > of a second. (Of course this second example needs quite a bit of > modification to provide a correct answer, but it does show how fast the > program can operate on a large list.) > t = {14, 5, 10, 9, 58, 05}; > tList = Table[t, {i, 100000}]; > a = Timing[( ((#[[3]] 0 + #[[2]] 30 + #[[1]]24) + #[[4]]) 60 + #[[5]]) > 60 + #[[6]] & /@ tList;] > > Some background: am analyzing some historical data (about 500 000 > records, one data point a minute for about a year) and am making a few > utilities to retrieve the data for any given time interval. My > original plan was to change the time stamp to absolute time and then use > a select statement. This step in the above example, changing the time > stamps to absolute time, is the rate limiting step in the code > (everything else runs in about 5 seconds). > > Was wondering if someone could explain why AbsoluteTime[] is relatively > slow operation and perhaps some faster operations for date and time > comparisons. > > Thanks > -- DrMajorBob at yahoo.com
- References:
- AbsoluteTime[] runs slowly?
- From: Robert McHugh <bob_mchugh_2000@yahoo.com>
- AbsoluteTime[] runs slowly?