我的文件格式如下:
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
我想使用ipython plot函数绘制这些点,执行以下操作:
In [40]: mean_data = load("/Users/daydreamer/data/mean")
但它没有说出以下内容:
---------------------------------------------------------------------------
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
如何解决此错误?
答案 0 :(得分:15)
numpy.load
例程用于加载pickled .npy
或.npz
二进制文件,这些文件可分别使用numpy.save
和numpy.savez
创建。由于您有文本数据,因此这些不是您想要的例程。
您可以使用numpy.loadtxt
加载逗号分隔值。
import numpy as np
mean_data = np.loadtxt("/Users/daydreamer/data/mean", delimiter=',')
这是一个完整的示例(使用StringIO
来模拟文件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=',')
现在我们有:
>>> 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]])