包含数组float32元素的字典

时间:2018-07-03 19:33:51

标签: python json python-3.x numpy

我有两个空列表,它们稍后在我的代码中带有附加值;这是在Python 3.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中的float dtype创建JSON文件。任何人都对如何将float32转换为JSON所需的字符串值有任何想法?

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

array([[12.34]], dtype=float32) is not JSON serializable

1 个答案:

答案 0 :(得分:0)

有了您向我们展示的timesamounts,我做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}'

但是字典不会如您所显示的那样打印。为此,我必须将amounts变成一个数组。

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