Задача состоит в том, чтобы сохранить не только буфер данных, но также форму и dtype. np.fromstring
читает буфер данных, но в виде 1d-массива; Вы должны получить dtype и форму из другого места.
In [184]: a=np.arange(12).reshape(3,4)
In [185]: np.fromstring(a.tostring(),int)
Out[185]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [186]: np.fromstring(a.tostring(),a.dtype).reshape(a.shape)
Out[186]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])