Python 2.7 pickle 无法识别 numpy 多数组
Python 2.7 pickle won't recognize numpy multiarray
我需要从协作者那里加载一组腌制数据。问题是,看来我需要多阵列。我的代码如下:
f = open('data.p', 'rb')
a = pickle.load(f)
这是错误信息。
ImportError Traceback (most recent call last)
<ipython-input-3-17918c47ae2d> in <module>()
----> 1 a = pk.load(f)
/usr/lib/python2.7/pickle.pyc in load(file)
1382
1383 def load(file):
-> 1384 return Unpickler(file).load()
1385
1386 def loads(str):
/usr/lib/python2.7/pickle.pyc in load(self)
862 while 1:
863 key = read(1)
--> 864 dispatch[key](self)
865 except _Stop, stopinst:
866 return stopinst.value
/usr/lib/python2.7/pickle.pyc in load_global(self)
1094 module = self.readline()[:-1]
1095 name = self.readline()[:-1]
-> 1096 klass = self.find_class(module, name)
1097 self.append(klass)
1098 dispatch[GLOBAL] = load_global
/usr/lib/python2.7/pickle.pyc in find_class(self, module, name)
1128 def find_class(self, module, name):
1129 # Subclasses may override this
-> 1130 __import__(module)
1131 mod = sys.modules[module]
1132 klass = getattr(mod, name)
ImportError: No module named multiarray
我以为是我电脑编译的numpy的问题。所以我从我的 Arch Linux 仓库中卸载了 numpy 并通过
安装了 numpy
sudo -H pip2 install numpy
但问题依然存在。我检查了文件夹$PACKAGE-SITE/numpy/core
,multiarray.so
在里面。而且我不知道为什么 pickle 无法加载模块。
我该如何解决这个问题?我还需要做什么?
PS1。我正在使用 Arch Linux。并尝试了自去年 10 月以来所有版本的 python 2.7。 None 其中有效。
PS2。由于问题出在加载步骤上。我怀疑问题更可能来自 python 的内部冲突,而不是来自数据文件。
感谢@MikeMcKems,问题现已解决。
此问题是由 MS Windows 和 Linux(例如行尾符号)使用的不同特殊符号引起的。我的合作者正在使用 Windows 机器,并使用
保存数据
pickle.dump(obj, 'filename', 'w')
数据以纯文本形式保存,其中有很多特殊符号。当我用我的 Linux 机器加载数据时,符号被误解,因此导致了问题。
最简单的解决方法就是找一台Windows机器,用
加载数据
a=pickle.load(open('filename_in', 'r'))
然后以二进制形式输出
pickle.dump(a, open('filename_out', 'wb'))
由于二进制数据只要用pickle
读取就可以被普遍识别,所以文件filename_out
很容易被linux中的Python识别。
我需要从协作者那里加载一组腌制数据。问题是,看来我需要多阵列。我的代码如下:
f = open('data.p', 'rb')
a = pickle.load(f)
这是错误信息。
ImportError Traceback (most recent call last)
<ipython-input-3-17918c47ae2d> in <module>()
----> 1 a = pk.load(f)
/usr/lib/python2.7/pickle.pyc in load(file)
1382
1383 def load(file):
-> 1384 return Unpickler(file).load()
1385
1386 def loads(str):
/usr/lib/python2.7/pickle.pyc in load(self)
862 while 1:
863 key = read(1)
--> 864 dispatch[key](self)
865 except _Stop, stopinst:
866 return stopinst.value
/usr/lib/python2.7/pickle.pyc in load_global(self)
1094 module = self.readline()[:-1]
1095 name = self.readline()[:-1]
-> 1096 klass = self.find_class(module, name)
1097 self.append(klass)
1098 dispatch[GLOBAL] = load_global
/usr/lib/python2.7/pickle.pyc in find_class(self, module, name)
1128 def find_class(self, module, name):
1129 # Subclasses may override this
-> 1130 __import__(module)
1131 mod = sys.modules[module]
1132 klass = getattr(mod, name)
ImportError: No module named multiarray
我以为是我电脑编译的numpy的问题。所以我从我的 Arch Linux 仓库中卸载了 numpy 并通过
安装了 numpysudo -H pip2 install numpy
但问题依然存在。我检查了文件夹$PACKAGE-SITE/numpy/core
,multiarray.so
在里面。而且我不知道为什么 pickle 无法加载模块。
我该如何解决这个问题?我还需要做什么?
PS1。我正在使用 Arch Linux。并尝试了自去年 10 月以来所有版本的 python 2.7。 None 其中有效。 PS2。由于问题出在加载步骤上。我怀疑问题更可能来自 python 的内部冲突,而不是来自数据文件。
感谢@MikeMcKems,问题现已解决。
此问题是由 MS Windows 和 Linux(例如行尾符号)使用的不同特殊符号引起的。我的合作者正在使用 Windows 机器,并使用
保存数据pickle.dump(obj, 'filename', 'w')
数据以纯文本形式保存,其中有很多特殊符号。当我用我的 Linux 机器加载数据时,符号被误解,因此导致了问题。
最简单的解决方法就是找一台Windows机器,用
加载数据a=pickle.load(open('filename_in', 'r'))
然后以二进制形式输出
pickle.dump(a, open('filename_out', 'wb'))
由于二进制数据只要用pickle
读取就可以被普遍识别,所以文件filename_out
很容易被linux中的Python识别。