[Numpy-discussion] Fastest way to save a dictionary of numpy record arrays
Warren Weckesser
warren.weckesser at enthought.com
Mon Jun 14 20:27:44 EDT 2010
Robert Kern wrote:
> On Mon, Jun 14, 2010 at 19:00, Vishal Rana <ranavishal at gmail.com> wrote:
>
>> Hi,
>> I have dictionary of numpy record arrays, what could be fastest way to
>> save/load to/from a disk. I tried numpy.save() but my dictionary is lost and
>> cPickle seems to be slow.
>>
>
> numpy.savez() will save a dictionary of arrays out to a .zip file.
> Each key/value pair will map to a file in the .zip file with a file
> name corresponding to the key.
>
>
Hey Robert,
If I expand the dictionary to keyword arguments to savez, it works
beautifully:
-----
In [4]: a = np.array([[1,2,3],[4,5,6]])
In [5]: b = np.array([('foo',1),('bar',2)], dtype=[('name', 'S8'),
('code', int)])
In [6]: d = dict(a=a, b=b)
In [7]: np.savez('mydata.npz', **d)
In [8]: q = np.load('mydata.npz')
In [9]: q['a']
Out[9]:
array([[1, 2, 3],
[4, 5, 6]])
In [10]: q['b']
Out[10]:
array([('foo', 1), ('bar', 2)],
dtype=[('name', '|S8'), ('code', '<i4')])
-----
But if I just pass in the dictionary to savez:
-----
In [26]: np.savez('mydata2.npz', d)
In [27]: q2 = np.load('mydata2.npz')
In [28]: q2.files
Out[28]: ['arr_0']
In [29]: q2['arr_0']
Out[29]:
array({'a': array([[1, 2, 3],
[4, 5, 6]]), 'b': array([('foo', 1), ('bar', 2)],
dtype=[('name', '|S8'), ('code', '<i4')])}, dtype=object)
-----
What would be the canonical way to pull this apart to get the arrays?
Warren
More information about the NumPy-Discussion
mailing list