python pickle保存字典,元组列表是los

2024-06-28 20:01:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手。我试图保存我的结果,但失败了。有人能帮我修改代码吗?在

parameter = k ##(k is an number)
L = [(1,matrix1), (2,matrix2), (2,matrix2),...]

首先我编了一本词典来记录我的结果

^{pr2}$

我使用以下代码保存和读取:

import pickle
output = open('result.pkl', 'wb')
pickle.dump(My_dict, output, -1)
output.close()

(我在这里查字典,到现在为止一切都是正确的)

但当我试图读取数据时:

pkl_file = open('result.pkl', 'rb')
res = pickle.load(pkl_file)
pprint.pprint(res)

我发现我的L是空的,如下所示:

'parameter': k,
'L': []

我的代码哪里出错了?谁能帮忙吗?在


Tags: 代码annumberoutputparameterisresresult
2条回答

我想问题是我的矩阵是numpy数组。看来我不应该用pickle来保存numpy数组。在

我不知道您为什么在pickle numpy数组或矩阵对象时遇到问题。他们应该泡菜。这里我用dill来腌制它们。在

>>> import dill
>>> n = numpy.array([[1,2,3],[4,5,6]])
>>> m = numpy.matrix(n)
>>> m
matrix([[1, 2, 3],
        [4, 5, 6]])
>>> dill.dumps(n)
'\x80\x02cdill.dill\n_create_array\nq\x00(cnumpy.core.multiarray\n_reconstruct\nq\x01cnumpy\nndarray\nq\x02K\x00\x85q\x03U\x01bq\x04\x87q\x05(K\x01K\x02K\x03\x86q\x06cnumpy\ndtype\nq\x07U\x02i8q\x08K\x00K\x01\x87q\tRq\n(K\x03U\x01<q\x0bNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x0cb\x89U0\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00q\rtq\x0eNtq\x0fRq\x10.'
>>> dill.dumps(m)
'\x80\x02cdill.dill\n_create_array\nq\x00(cnumpy.core.multiarray\n_reconstruct\nq\x01cnumpy.matrixlib.defmatrix\nmatrix\nq\x02K\x00\x85q\x03U\x01bq\x04\x87q\x05(K\x01K\x02K\x03\x86q\x06cnumpy\ndtype\nq\x07U\x02i8q\x08K\x00K\x01\x87q\tRq\n(K\x03U\x01<q\x0bNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x0cb\x89U0\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00q\rtq\x0e}q\x0fU\x08_getitemq\x10\x89stq\x11Rq\x12.'

首选的方法是使用dump方法,该方法与numpy对象一起提供。从上面的pickle可以看出,这实际上就是dill在做什么,但只是在开头添加了一些小东西(基本上,它还序列化了函数来取消数组的拾取)。在

^{pr2}$

因此,如果pickle本身不能直接作用于numpy对象,那么可以使用dill,或者可以对numpy对象本身使用dump/dumps方法。在

相关问题 更多 >