Mat*_*att 4 python json dictionary numpy
我正在寻找一种方法如何将包含numpy数组的嵌套字典转储到JSON文件中(以便将我的实验和数据的完整日志保存在一个地方).
我的字典看起来像这样(结构可能比显示的代码更嵌套):
import numpy as np
data = {'foo': {'bar': np.array([1, 2, 3])}, 'goo': np.array([3,5,7]),'fur': {'dur': {'mur': np.array([7,5,8])}}}
Run Code Online (Sandbox Code Playgroud)
此代码失败,因为numpy数组不可序列化:
with open('data.txt','w') as fl:
json.dump(data,fl)
Run Code Online (Sandbox Code Playgroud)
我知道可以使用tolist()函数,但我不知道如何在保留数据结构和交换np.arrays列表的同时遍历字典.
我尝试使用递归从字典中获取单个值,但我不知道如何"构建字典".我的代码(没有json转储):
import numpy as np
def dict_walk(data):
for k, v in data.iteritems():
if isinstance(v, dict):
dict_walk(v)
else:
l = v.tolist()
print l
data = {'foo': {'bar': np.array([1, 2, 3])}, 'goo': np.array([3,5,7]),'fur': {'dur': {'mur': np.array([7,5,8])}}}
dict_walk(data)
Run Code Online (Sandbox Code Playgroud)
你可以提供json.dump一个default功能; 它被调用JSON不知道如何处理的任何数据类型:
def default(obj):
if isinstance(obj, np.ndarray):
return obj.tolist()
raise TypeError('Not serializable')
with open('data.txt','w') as fl:
json.dump(data, fl, default=default)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1197 次 |
| 最近记录: |