栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用于复杂numpy数组的Json编码器和解码器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用于复杂numpy数组的Json编码器和解码器

这是我根据hpaulj的回答以及他对此线程的回答改编而成的最终解决方案:https
://stackoverflow.com/a/24375113/901925

这将对嵌套在任何数据类型的字典中任意深度的数组进行编码/解码。

import base64import jsonimport numpy as npclass NumpyEnprer(json.JSONEnprer):    def default(self, obj):        """        if input object is a ndarray it will be converted into a dict holding dtype, shape and the data base64 enpred        """        if isinstance(obj, np.ndarray): data_b64 = base64.b64enpre(obj.data) return dict(__ndarray__=data_b64,  dtype=str(obj.dtype),  shape=obj.shape)        # Let the base class default method raise the TypeError        return json.JSonEnprer(self, obj)def json_numpy_obj_hook(dct):    """    Depres a previously enpred numpy ndarray    with proper shape and dtype    :param dct: (dict) json enpred ndarray    :return: (ndarray) if input was an enpred ndarray    """    if isinstance(dct, dict) and '__ndarray__' in dct:        data = base64.b64depre(dct['__ndarray__'])        return np.frombuffer(data, dct['dtype']).reshape(dct['shape'])    return dct# Overload dump/load to default use this behavior.def dumps(*args, **kwargs):    kwargs.setdefault('cls', NumpyEnprer)    return json.dumps(*args, **kwargs)def loads(*args, **kwargs):    kwargs.setdefault('object_hook', json_numpy_obj_hook)        return json.loads(*args, **kwargs)def dump(*args, **kwargs):    kwargs.setdefault('cls', NumpyEnprer)    return json.dump(*args, **kwargs)def load(*args, **kwargs):    kwargs.setdefault('object_hook', json_numpy_obj_hook)    return json.load(*args, **kwargs)if __name__ == '__main__':    data = np.arange(3, dtype=np.complex)    one_level = {'level1': data, 'foo':'bar'}    two_level = {'level2': one_level}    dumped = dumps(two_level)    result = loads(dumped)    print 'noriginal data', data    print 'nnested dict of dict complex array', two_level    print 'ndepred nested data', result

产生输出:

original data [ 0.+0.j  1.+0.j  2.+0.j]nested dict of dict complex array {'level2': {'level1': array([ 0.+0.j,  1.+0.j,  2.+0.j]), 'foo': 'bar'}}depred nested data {u'level2': {u'level1': array([ 0.+0.j,  1.+0.j,  2.+0.j]), u'foo': u'bar'}}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609185.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号