我在Windows 7计算机上安装了Python 2.7.3。当我运行以下代码时
import nltk, json, cPickle, itertools
import numpy as np
from nltk.tokenize import word_tokenize
from pprint import pprint
t_given_a = json.load(open('conditional_probability.json','rb'))
a_unconditional = json.load(open('age.json','rb'))
t_unconditional = cPickle.load(open('freqdist.pkl','rb'))['distribution']
命令提示符给出了错误 “ImportError:没有名为Multiarray的模块。”
我对Python很新,我不确定为什么会发生这个错误。我搜索了其他线程,许多人建议使用'rb'而不是'r'。我有rb开始,它仍然给我这个错误。有什么建议吗?
答案 0 :(得分:4)
当你在python中pickle一个对象时,它将它的类保存为包名+类名的字符串。在unpickle python尝试导入该模块并找到该类来重新创建一个对象。如果您没有该模块可导入,则会导致ImportError。
只需安装Multiarray模块,如果你不知道它是哪一个,那么问问你从哪个拿到那个pickle文件。
答案 1 :(得分:2)
来自docs:
请注意,功能(内置和用户定义)被“完全”腌制 合格的“名称参考,而不是价值。这意味着只有 功能名称被腌制,以及模块的名称 函数定义为。函数的代码,也不是函数的代码 功能属性是pickle。因此,定义模块必须是 可以在unpickling环境中导入,并且模块必须包含 命名对象,否则将引发异常。
同样,类通过命名引用进行pickle,因此具有相同的限制 破坏环境适用。请注意,没有类的代码 或者数据被腌制
[...]这些限制是可选功能和类必须的原因 在模块的顶层定义