"""
https://stackoverflow.com/questions/27909658/json-encoder-and-decoder-for-complex-numpy-arrays
"""
import numpy as np
try:
from functools import reduce
except ImportError:
pass
import operator
[docs]class Encode_NDArray(object): # noqa: N801
"""
Examples
--------
>>> from pprint import pprint
>>> import numpy as np
>>> Encode_NDArray().to_str(np.asarray([1,2,3]))
'[1 2 3]'
>>> pprint(Encode_NDArray().to_json(np.asarray([1,2,3])))
{'_numpy_ndarray_': {'dtype': 'int64', 'value': [1, 2, 3]}}
>>> Encode_NDArray().from_json({'_numpy_ndarray_': {'dtype': 'int64', 'value': [1, 2, 3]}})
array([1, 2, 3])
""" # noqa: E501
plugin_name = 'numpy.ndarray'
plugin_descript = 'encode/decode numpy.ndarray'
objclass = np.ndarray
dict_signature = ['_numpy_ndarray_']
[docs] def to_str(self, obj):
elements = reduce(operator.mul, obj.shape, 1)
if elements > 10:
return 'np.array({0}, min={1:.2E}, max={2:.2E})'.format(
obj.shape, np.nanmin(obj), np.nanmax(obj))
else:
return ' '.join(str(obj).split())
[docs] def to_json(self, obj):
return {'_numpy_ndarray_': {
'value': obj.tolist(),
'dtype': str(obj.dtype)}}
[docs] def from_json(self, obj):
return np.array(obj['_numpy_ndarray_']['value'],
dtype=obj['_numpy_ndarray_']['dtype'])