代码之家  ›  专栏  ›  技术社区  ›  DataGuy

包含数组float32元素的字典

  •  0
  • DataGuy  · 技术社区  · 7 年前

    我有两个空列表,稍后在代码中会获取附加值;这在Python3.5中完成:

    times = []
    amounts = []
    

    在接受这些值后,列表如下:

    times = [1, 2, 3, 4]
    amounts = [12.34, 12.43, 87.65, 98.01]
    

    我将这两个列表合并成一个字典:

    data = dict(zip(times, amounts))
    

    我需要将这个字典序列化为JSON文件输出,但是当我打印字典时,我总是得到这个奇怪的输出:

    {1: array([[12.34]], dtype=float32), 2: array([[12.43]], dtype=float32)} 
    

    我无法创建一个浮动数据类型仍在dict中的JSON文件。有人对如何将float32转换为JSON所需的字符串值有任何想法吗?

    当我使用json.dumps时,我得到以下信息:

    array([[12.34]], dtype=float32) is not JSON serializable
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   hpaulj    7 年前

    times amounts dumps

    In [140]: times
    Out[140]: [1, 2, 3, 4]
    In [141]: amounts
    Out[141]: [12.34, 12.43, 87.65, 98.01]
    In [142]: dd = dict(zip(times, amounts))
    In [143]: dd
    Out[143]: {1: 12.34, 2: 12.43, 3: 87.65, 4: 98.01}
    In [144]: json.dumps(dd)
    Out[144]: '{"1": 12.34, "2": 12.43, "3": 87.65, "4": 98.01}'
    

    In [147]: arr = np.array(amounts,'float32')[:,None,None]
    In [148]: arr.shape
    Out[148]: (4, 1, 1)
    In [149]: arr
    Out[149]: 
    array([[[12.34]],
    
           [[12.43]],
    
           [[87.65]],
    
           [[98.01]]], dtype=float32)
    In [150]: dd = dict(zip(times, arr))
    In [151]: print(dd)
    {1: array([[12.34]], dtype=float32), 2: array([[12.43]], dtype=float32), 3: array([[87.65]], dtype=float32), 4: array([[98.01]], dtype=float32)}
    

    ndarray

    In [152]: json.dumps(dd)
    --------------------------------------------------------------------------
    TypeError: Object of type 'ndarray' is not JSON serializable