3
$\begingroup$

I didn't see this coming:

ClearAll[randomTimeSeries]

randomTimeSeries[seed_ : RandomInteger[{10^6, 10^7}], m_ : 3, n_ : 30,iRandRng_ : {1, 7}] :=     
    Module[{ds, vs, junk, ts},
      {junk, {ts}} = Do[
        BlockRandom[
          ds = NestList[(DatePlus[#, -RandomInteger[iRandRng]] &), AbsoluteTime[], n - 1] // Reverse;
          vs = RandomReal[{0, 1}, n] // Accumulate;
          TimeSeries[vs, {ds}, ResamplingMethod -> {"Interpolation", 0}, MetaInformation -> {"seed" -> seed + j}] // Quiet /* Sow, 
            RandomSeeding -> seed + j], {j, 1, m}] // Reap;
      ts // (TimeSeriesThread[Mean, #] &)
 ]

Every single time I evaluate randomTimeSeries[RandomInteger[{10^6, 10^7}]] // Accumulate I get

  1. Error messages about interpolation even though I am using Quiet
  2. High memory and CPU usage and
  3. The Kernel quits with messages about there being insufficient memory

I'm on Win10, using v.12.1.

Does anybody know whats going on ?

$\endgroup$
3
  • $\begingroup$ What are your thoughts? $\endgroup$ Apr 20 '20 at 18:01
  • $\begingroup$ If you remove the Accumulate, you get the warnings (they're not errors, they are warning you that its extrapolating, not interpolating) and a time series object. Maybe look carefully at the time series object to see why it is causing problems... $\endgroup$
    – bill s
    Apr 20 '20 at 18:08
  • $\begingroup$ @bills shouldn't there be no messages since I'm using Quiet? It really threw my schedule out the window today but I think the problem is due to the fact that there are non-regular series involved; using TemporalRegularity->True seems to make the Kernel happy $\endgroup$
    – user42582
    Apr 20 '20 at 19:56
5
$\begingroup$

This is as designed. If we set

ts = randomTimeSeries[RandomInteger[{10^6, 10^7}]]

then RegularlySampledQ[ts] is False which means that calling Accumulate on it will first trigger TimeSeriesResample on ts with respect to the minimal time step:

In[3]:= ts["MinimumTimeIncrement"]

Out[3]= {0.00926208}

which is very small compared to the other time increments:

In[5]:= Differences[ts["Times"]] // MinMax

Out[5]= {0.00926208, 432000.}

and hence the huge memory usage and hang and/or crash.

If the objective is to accumulate values only then either call Accumulate on ts["Values"] or create new TimeSeries object that forces TemporalRegularity to True and then apply Accumulate:

In[6]:= ts1 = TimeSeries[ts, TemporalRegularity -> True];

In[9]:= (Accumulate[ts1] // Head) // AbsoluteTiming

Out[9]= {0.000467, TemporalData}
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.