【问题标题】:numpy/scipy/ipython:Failed to interpret file as a picklenumpy/scipy/ipython:无法将文件解释为泡菜
【发布时间】:2012-02-22 15:02:48
【问题描述】:

我有以下格式的文件:

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 绘图函数绘制这些点,执行以下操作:

   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

如何解决这个错误?

【问题讨论】:

  • numpy.load 不适用于加载 ascii 数据。它用于加载 numpy 的内部二进制格式或腌制的 numpy 数组。你想要numpy.loadtxtnumpy.genfromtxt(后者处理缺失值)

标签: python numpy matplotlib scipy ipython


【解决方案1】:

numpy.load 例程用于加载腌制的.npy.npz 二进制文件,可以分别使用numpy.savenumpy.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]])

【讨论】:

  • 也许您还应该指出,为了完整起见,加载是为了加载腌制的 .npy.npz 二进制文件。
  • @joaquin 这是个好建议;谢谢!我已更新答案以纳入您的建议。
  • 难以置信,我正要做这样的事情,我看到有人已经在这里经历了完全相同的事情。不错!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
相关资源
最近更新 更多