[Numpy-discussion] What to use to read and write numpy arrays to a file?

Robert Kern robert.kern at gmail.com
Mon Dec 8 16:15:41 EST 2008


On Mon, Dec 8, 2008 at 14:54, Lou Pecora <lou_boog2000 at yahoo.com> wrote:
> In looking for simple ways to read and write data (in a text readable format) to and from a file and later restoring the actual data when reading back in, I've found that numpy arrays don't seem to play well with repr and eval.
>
> E.g. to write some data (mixed types) to a file I can do this (fp is an open file),
>
>  thedata=[3.0,-4.9+2.0j,'another string']
>  repvars= repr(thedata)+"\n"
>  fp.write(repvars)
>
> Then to read it back and restore the data each to its original type,
>
>  strvars= fp.readline()
>  sonofdata= eval(strvars)
>
> which gives back the original data list.
>
> BUT when I try this with numpy arrays in the data list I find that repr of an array adds extra end-of-lines and that messes up the simple restoration of the data using eval.

I don't see any extra end-of-lines. Are you sure you aren't talking
about the "..." when you are saving large arrays? You will need to use
set_printoptions() to disable that (threshold=sys.maxint). You should
also adjust use precision=18, suppress=False. That should mostly work,
but it's never a certain thing.

> Am I missing something simple?  I know I've seen people recommend ways to save arrays to files, but I'm wondering what is the most straight-forward?  I really like the simple, pythonic approach of the repr - eval pairing.
>
> Thanks for any advice. (yes, I am googling, too)

The most bulletproof way would be to use numpy.save() and
numpy.load(), but this is a binary format, not a text one.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
  -- Umberto Eco



More information about the NumPy-Discussion mailing list