Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Storing and Loading Definitions / Emulating Associative Arrays

  • To: mathgroup at smc.vnet.net
  • Subject: [mg93441] Storing and Loading Definitions / Emulating Associative Arrays
  • From: Nikolaus Rath <Nikolaus at rath.org>
  • Date: Sat, 8 Nov 2008 03:59:12 -0500 (EST)

Hi,

I have a routine that calculates some sequence of numbers. The
calculation takes very long, so I would like to store the results in a
file.

What I would like to do is to pack the data, together with the
parameters of its generation, into some sort of associative array.
Since I couldn't find such a thing in Mathematica, I came up with the
idea of using definitions instead:


f[seed_, p_, n_] = (* Complicated computation *) {2,4,4};
data[source] = "simulation";
data[seed] = 42;
data[parameters] = {12, 0};
data[values] = f[data[seed], Sequence @@ data[parameters]]

Now I would like to (somehow) store this set of definitions:

Write[stream, something[data]]

and later load it again, possibly with a different name

data2 = Read[stream]


But what is the function something[] that I have to use for this
purpose? If I simply store the expression "data", then it is written
literally, without the associated definitions. If I use
Definition[data] then the output includes the name "data", so that I
cannot easily associate it with "data2" when loading. Is there a
simple way to achieve what I want?

I guess a way would be to store definitions as an anonymous function:

    data = Function[{x}, Switch[x,
       source, "simulation",
       seed, 42,
       parameters, {12, 0},
       values, f[42, 12, 0]]];

    Write[stream, data]

but then I still need a way to convert between the anonymous function
and the definitions when saving and loading. I do not want to work
with the anonymous function all the time, since it seems very
difficult to modify any parameters after the initial definition:

   data = Read[Stream]
   (* do some stuff *)
   data[comment] = "Analysis on 11/7 showed that this situation is unli=
kely";

   (* Write back the data with the comment *)
  


Best,

   -Nikolaus

--
 =C2=BBIt is not worth an intelligent man's time to be in the majority.
  By definition, there are already enough people to do that.=C2=AB
                                                         -J.H. Hardy

  PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6  02CF A9AD B7F8 AE4E 425C


  • Prev by Date: Re: bug report: MoebiusMu sum
  • Next by Date: Re: NIntegrate[UnitStep[...]PDF[...],{x,...}] hard to integrate
  • Previous by thread: Re: Re: Re: 6.0.3 Windows front end won't connect
  • Next by thread: Re: Storing and Loading Definitions / Emulating Associative Arrays