| Frühere | Chronologischer Index | Spätere | ||
| Vorherige | Thematischer Index | Nächste |
Hallo Michael,
probieren Sie mit MemoryInUse[] aus, ob Mma 8.0.1 an den Stichprobenlaengen, bei denen AppendTo[] zeitlich angespannt ist, Speicher freigibt.
... kurz vor dem Mittag das noch aufgeräumt:
In[1]:= Remove[step]
step[o_Integer (* 1: Schiff, 0: Wasser *)] := o;
step[l_List] := Which[Last[l] >= 16, 1,
Mod[First[l],8] == 0, 0,
True, l + RandomChoice[{{0,0},{1,0},{-1,0},{0,1}}]];
In[12]:= Remove[wegeerzeugen]
wegeerzeugen[n_Integer] := Module[{wege = {}},
Do[
AppendTo[wege,
FixedPointList[step, {4, 1},
SameTest -> (#1 == #2 && Head[#1] == Integer &)]],
{n}
];
wege
]
In[14]:= First @ (Timing @ wegeerzeugen[10000])
Out[14]= 2.683
Warum wird hier Table[] nicht verwendet?
Do[], AppendTo[], Reap[], Sow[] sind völlig überrissen an der Stelle.
In[15]:= Remove[wegeerzeugenReap]
wegeerzeugenReap[n_Integer] := Module[{temp = {}},
Reap[Do[
temp =
FixedPointList[step, {4, 1},
SameTest -> (#1 == #2 && Head[#1] == Integer &)];
Sow[temp],
{n}
];]
]
In[17]:= First @ (Timing @ wegeerzeugenReap[10000])
Out[17]= 2.137
nun ist AppendTo[] nur noch schwach langsamer als Reap/Sow
und das Bildchen von
In[18]:= temp = Table[{First[Timing[wegeerzeugen[i]]],
First[Timing[wegeerzeugenReap[i]]]}, {i, 100, 10000, 100}];
In[20]:= ListPlot[{temp[[All, 1]], temp[[All, 2]]}, PlotStyle -> {Red,
Blue},
PlotRange -> All]im Anhang zeigt, dass die Ausreisser bei der Verwendung von AppendTo[] weg sind.
Anscheinend haben die unnötigen Symbole 'Schiff' und 'Wasser' AppendTo[] mehr zu schaffen gemacht als dem Reap/Sow. Gemeinhin reicht es, und so arbeitet auch das Gehirn selber, wenn die Codierung
so spät wie möglich mitgeteilt wird: 0 -> Wasser, 1 -> Schiff. Gruss Udo.
gamerKeineAusreisser.jpeg
Description: JPEG image
| Frühere | Chronologischer Index | Spätere | ||
| Vorherige | Thematischer Index | Nächste |
DMUG-Archiv, http://www.mathematica.ch/archiv.html