Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

numpy/scipy/ipython:Failed to interpret file as a pickle

I have the file in following format:

0,0.104553357966
1,0.213014562052
2,0.280656379048
3,0.0654249076288
4,0.312223429689
5,0.0959008911106
6,0.114207780917
7,0.105294501195
8,0.0900673766572
9,0.23941317105
10,0.0598239513149
11,0.541701803956
12,0.093929580526

I want to plot these point using ipython plot function doing the following:

   In [40]: mean_data = load("/Users/daydreamer/data/mean")

But it fails saying the following:

---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
/Users/daydreamer/<ipython-input-40-8f1329559411> in <module>()
----> 1 mean_data = load("/Users/daydreamer/data/mean")

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy-1.6.1-py2.7-macosx-10.5-fat3.egg/numpy/lib/npyio.pyc in load(file, mmap_mode)
    354             except:
    355                 raise IOError, \
--> 356                     "Failed to interpret file %s as a pickle" % repr(file)
    357     finally:
    358         if own_fid:

IOError: Failed to interpret file '/Users/daydreamer/data/mean' as a pickle

How do I fix this error?

like image 867
daydreamer Avatar asked Jan 30 '12 20:01

daydreamer


1 Answers

The numpy.load routine is for loading pickled .npy or .npz binary files, which can be created using numpy.save and numpy.savez, respectively. Since you have text data, these are not the routines you want.

You can load your comma-separated values with numpy.loadtxt.

import numpy as np
mean_data = np.loadtxt("/Users/daydreamer/data/mean", delimiter=',')

Full Example

Here's a complete example (using StringIO to simulate the file I/O).

import numpy as np
import StringIO

s = """0,0.104553357966
1,0.213014562052
2,0.280656379048
3,0.0654249076288
4,0.312223429689
5,0.0959008911106
6,0.114207780917
7,0.105294501195
8,0.0900673766572
9,0.23941317105
10,0.0598239513149
11,0.541701803956
12,0.093929580526"""

st = StringIO.StringIO(s)
a = np.loadtxt(st, delimiter=',')

Now we have:

>>> a
array([[  0.        ,   0.10455336],
       [  1.        ,   0.21301456],
       [  2.        ,   0.28065638],
       [  3.        ,   0.06542491],
       [  4.        ,   0.31222343],
       [  5.        ,   0.09590089],
       [  6.        ,   0.11420778],
       [  7.        ,   0.1052945 ],
       [  8.        ,   0.09006738],
       [  9.        ,   0.23941317],
       [ 10.        ,   0.05982395],
       [ 11.        ,   0.5417018 ],
       [ 12.        ,   0.09392958]])
like image 52
David Alber Avatar answered Nov 18 '22 21:11

David Alber