numpy.save encode all the information needed to reconstruct an arbitrary NumPy array, even in the presence of endianness issues, non-contiguous arrays, or weird tuple dtypes. Endianness issues are probably the most important; you don't want
array() to suddenly become
array() because you loaded your array on a big-endian machine.
pickle is probably the more convenient option, though
save has its own benefits, given in the
npy format rationale.
import pickle a = # some NumPy array serialized = pickle.dumps(a, protocol=0) # protocol 0 is printable ASCII deserialized_a = pickle.loads(serialized)
numpy.save uses a binary format, and it needs to write to a file, but you can get around that with
a = # any NumPy array memfile = StringIO.StringIO() numpy.save(memfile, a) memfile.seek(0) serialized = json.dumps(memfile.read().decode('latin-1')) # latin-1 maps byte n to unicode code point n
And to deserialize:
memfile = StringIO.StringIO() memfile.write(json.loads(serialized).encode('latin-1')) memfile.seek(0) a = numpy.load(memfile)