我的词典将包含数千个键,每个键具有1000x1000 numpy数组作为值。我不需要该文件是人类可读的。小尺寸和快速装载时间更重要。
首先我尝试了savemat,但我遇到了problems。 Pickle导致了一个巨大的文件。我对csv假设相同。我已经阅读了推荐使用json(可读文本可能很大)或db(假设复杂)的帖子。你会为我的案子推荐什么?
答案 0 :(得分:6)
如果你有一个字典,其中键是字符串,值是数组,如下所示:
>>> import numpy
>>> arrs = {'a': numpy.array([1,2]),
'b': numpy.array([3,4]),
'c': numpy.array([5,6])}
您可以使用numpy.savez按键将它们保存到压缩文件中:
>>> numpy.savez('file.npz', **arrs)
要加载它:
>>> npzfile = numpy.load('file.npz')
>>> npzfile
<numpy.lib.npyio.NpzFile object at 0x1fa7610>
>>> npzfile['a']
array([1, 2])
>>> npzfile['b']
array([3, 4])
>>> npzfile['c']
array([5, 6])
答案 1 :(得分:3)
文件系统本身通常是一种未被充分认识的数据结构。您可以拥有一个字典,它是从键到文件名的映射,然后每个文件中都包含1000x1000数组。挑选字典会很快捷,然后数据文件就可以包含原始数据(numpy很容易加载)。
答案 2 :(得分:2)
numpy.savez怎么样?它可以保存多个numpy数组,它们是二进制的,所以它应该比pickle更快。
答案 3 :(得分:0)
Google的Protobuf规范旨在提高开销效率。我不确定(de)序列化的速度有多快,但作为谷歌,我想它并不简陋。
答案 4 :(得分:0)
您可以使用PyTables(http://www.pytables.org/moin),并以HDF5格式保存数据。