在Python中,如果你想将包含NumPy数组的对象保存为JSON格式,你需要将NumPy数组转换为Python的列表格式,因为JSON不支持直接序列化NumPy数据类型。可以使用NumPy的.tolist()
方法来将NumPy数组转换为列表。为了自动处理包含NumPy数组的对象,可以自定义一个JSON编码器类,或者在序列化之前手动转换。
方法一:自定义JSON编码器
import json
import numpy as np
class NumpyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.ndarray):
return obj.tolist()
return super(NumpyEncoder, self).default(obj)
data = {
'array': np.array([1, 2, 3]),
'nested': {
'array': np.array([4, 5, 6])
}
}
with open('data.json', 'w') as f:
json.dump(data, f, cls=NumpyEncoder)
方法二: 手动转换
import json
import numpy as np
def convert_numpy_to_list(data):
if isinstance(data, dict):
return {key: convert_numpy_to_list(value) for key, value in data.items()}
elif isinstance(data, list):
return [convert_numpy_to_list(element) for element in data]
elif isinstance(data, np.ndarray):
return data.tolist()
else:
return data
data = {
'array': np.array([1, 2, 3]),
'nested': {
'array': np.array([4, 5, 6])
}
}
converted_data = convert_numpy_to_list(data)
with open('data.json', 'w') as f:
json.dump(converted_data, f)