Словарь, содержащий массив float32 element - PullRequest
0 голосов
/ 03 июля 2018

У меня есть два пустых списка, которые принимают добавленные значения позже в моем коде; это сделано в 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)} 

Я не могу создать JSON-файл с плавающим dtype, все еще в поле зрения. У кого-нибудь есть идеи о том, как преобразовать float32 в строковое значение, необходимое для JSON?

Когда я использую json.dumps, я получаю следующее:

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

1 Ответ

0 голосов
/ 04 июля 2018

С 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}'

Но словарь печатается не так, как вы показываете. Чтобы получить это, я должен превратить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...