DMUG-Archiv 2009

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: DumpSave

Hallo Martin,

Kann mir jemand sagen, warum DumpSave manchmal extrem langsam ist? Ich
habe ein multi-dimensionales Zahlenarray (27x12x72x144 reelle Zahlen)
berechnet, welches ich binär abspeichern möchte. DumpSave benötigt
über 500 Sekunden, während Export["Zahlen.bin64",array,"Real64"] dies
in weniger als einer Sekunde schafft.

In dieser Allgemeinheit leider nein:

In[13]:= a =
  Table[Sin[i/27.] Cos[j/12.] Csc[k/72.] Sec[l/144.], {i, 27}, {j,
    12}, {k, 72}, {l, 144}];

In[3]:= Dimensions[a]
Out[3]= {27, 12, 72, 144}

In[4]:= SetDirectory[NotebookDirectory[] <> "\\test"]
Out[4]= "C:\\Udo\\Abt_N\\test"

In[20]:= Timing[DumpSave["heimannArray.mx", a];]
Out[20]= {0.562, Null}

Die Zeiten sind konstant unter einer Sekunde ((min 0.562, max. 0.989 Sekunden), die Festplatte ist nicht in einem Netzwerk, front end und kernel laufen auf demselben Prozessor. Der Rechner hat 2.53 GHz Taktfrequenz und 512 MB Memory. Es entsteht eine Datei von 26'245 kB Grösse.

Merkwürdig ist allerdings, dass wenn ich das mit Export
rausgeschriebene Array wieder binär importiere und einer neuen
Variablen zuordne, dass ich diese dann mit DumpSave sehr schnell
speichern kann. Dabei sind die binär eingelesenen Zahlen identisch mit
den Zahlen im primären Array.

DumpSave writes out definitions in a binary format that is optimized for input by Mathematica, sagt die Hilfe. Der experimentelle Befund der Beschleunigung von DumpSave[] nach Umbenennung des array kann darauf hindeuten, dass vor der Umbenennung zu dem Array gehörige Definitionen mitgeschrieben werden. Um dem weiter nachzugehen, müssten mehr als eine umgangssprachliche Problemdarstellung kundgetan werden.

Möglich ist auch, dass der verwendete Arrayname noch anderswo in geladenen Packages und/oder geöffneten Notebooks vorkommt und dies zum Schreiben einer Kette von Definitionen führt - ist die Grösse der von DumpSave[] geschriebenen Files unabhängig davon, ob eine Umbenennung erfolgte oder nicht erfolgte?

Offensichtlich speichert DumpSave noch weitere Informationen neben den
eigentlichen Zahlen - aber welche?

Das findet man auf einfachste Weise heraus, indem man nach dem DumpSave[] Mma beendet. Dann startet man es neu, öffnet ein neues Notebook, lädt das dump file theArray.mx mit Get[] und tippt

Names["Global`*"]

Falls eigene Kontexte - d.h. andere als Global` - durch das Get[] eingeführt werden, kann man das mit dem Ruf von Contexts[] vor und nach dem Get[] und einem Mengendurchschnitt feststellen und nach den Symbolen dieser Kontexte entsprechend suchen.

Mit den besten Grüssen
Udo.


Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html