Python 如何将数组字典保存到Numpy中的文件
我有一个数组的目录Python 如何将数组字典保存到Numpy中的文件,python,numpy,Python,Numpy,我有一个数组的目录 {1:array([...]), 2:array([...]), 3:array([...])} 我想把它保存到一个文件中,稍后再加载回来 我发现numpy有一个方法列表,但它们似乎只处理数组 谢谢。实际上,您可以使用内置库来序列化和反序列化对象,而无需使用numpy 这是一个模拟代码 import pickle data1 = {'a': [1, 2.0, 3, 4 + 6j], 'b': ('string', u'Unicode string'),
{1:array([...]), 2:array([...]), 3:array([...])}
我想把它保存到一个文件中,稍后再加载回来
我发现numpy有一个方法列表,但它们似乎只处理数组
谢谢。实际上,您可以使用内置库来序列化和反序列化对象,而无需使用numpy 这是一个模拟代码
import pickle
data1 = {'a': [1, 2.0, 3, 4 + 6j],
'b': ('string', u'Unicode string'),
'c': None}
print data1, type(data1)
with open('data.pkl', 'wb') as output:
# Pickle dictionary using protocol 0.
pickle.dump(data1, output)
# load data from pkl file
with open("data.pkl", "rb") as fp:
loaded_data1 = pickle.load(fp)
print loaded_data1, type(loaded_data1)
结果
Before: {'a': [1, 2.0, 3, (4+6j)], 'c': None, 'b': ('string', u'Unicode string')} <type 'dict'>
After: {'a': [1, 2.0, 3, (4+6j)], 'c': None, 'b': ('string', u'Unicode string')} <type 'dict'>
Before:{'a':[1,2.0,3,(4+6j)],'c':无,'b':('string',u'Unicode string'))
之后:{'a':[1,2.0,3,(4+6j)],'c':无,'b':('string',u'Unicode string')}
希望有帮助。以下脚本将把numpy数组的dict保存到磁盘,然后将其加载回内存
import numpy as np
arr1 = np.arange(0, 10, 1)
arr2 = np.arange(10, 20, 1)
arr3 = np.arange(20, 30, 1)
dct = {'1': arr1, '2': arr2, '3':arr3}
outfile = 'dict_of_arrays.npz'
np.savez(outfile, **dct)
npzfile = np.load(outfile)
print('npzfile.files: {}'.format(npzfile.files))
print('npzfile["1"]: {}'.format(npzfile["1"]))
运行此脚本将显示以下内容:
npzfile.files: ['1', '3', '2']
npzfile["1"]: [0 1 2 3 4 5 6 7 8 9]
请注意,dict键必须是字符串。也许这就是问题所在
我正在运行numpy 1.10.4使用scipy.io.savemat()/loadmat():
这将在Matlab style.mat文件中保存名称和数组的字典
优点:
1) 您可以将多个数组(包括numpy数组)以二进制格式保存到单个文件中,与保存到json(例如)相比,使用的HD空间要少得多
2) 您不仅可以保存和恢复一维阵列,还可以保存和恢复多维阵列
注意:可能您将不得不使用字符串作为键而不是int。@GarrettR
savez
,savetxt
我是否需要通过npzfile
循环获取我的dct
,还是有更简单的方法?但是,将所有键转换为字符串有点不方便。您使用的是什么类型的key
值?在npz
中,每个数组都保存在一个文件中,该文件的名称与数组的name/key
匹配。npz
本身是这些文件的zip
存档。npzfile
的行为类似于dict,您可以对其进行迭代。它确实支持项目分配,所以你不能做像npzfile[4]=array
这样的事情,但是你可以只做dct=dict(npzfile)
,然后你就有了一个可以分配新元素的字典;只有在访问键
时,才会提取并加载特定数组。噢,感谢您指出这一点。我不知道它是懒惰的,但它是很有意义的,因为我使用元组作为字典的标记,这似乎是编写字典的唯一选择。我想问题是假设我们已经有了numpy ARAY
import scipy.io as sio
sio.savemat(filename, pydict)
...
pydict = sio.loadmat(filename)