numpy.array.tostring
doesn't seem to preserve information about matrix dimensions (see this question), requiring the user to issue a call to numpy.array.reshape
.
Is there a way to serialize a numpy array to JSON format while preserving this information?
Note: The arrays may contain ints, floats or bools. It's reasonable to expect a transposed array.
Note 2: this is being done with the intent of passing the numpy array through a Storm topology using streamparse, in case such information ends up being relevant.
pickle.dumps
ornumpy.save
encode all the information needed to reconstruct an arbitrary NumPy array, even in the presence of endianness issues, non-contiguous arrays, or weird structured dtypes. Endianness issues are probably the most important; you don't wantarray([1])
to suddenly becomearray([16777216])
because you loaded your array on a big-endian machine.pickle
is probably the more convenient option, thoughsave
has its own benefits, given in thenpy
format rationale.I'm giving options for serializing to JSON or a bytestring, because the original questioner needed JSON-serializable output, but most people coming here probably don't.
The
pickle
way:numpy.save
uses a binary format, and it needs to write to a file, but you can get around that withio.BytesIO
:And to deserialize: