我使用Python 2.7.9和Numpy版本1.11.3创建的.npy文件与命令np.save('filename')
。这些文件是在我们研究所的Linux集群的一部分外部机器上生成的。我将这些文件复制到本地机器,以便通过np.load('filename.npy')
导入它们。在我的本地机器上,我使用Jupyter-Notebook运行Python 3.5.2和Numpy Version 1.13.0。本地操作系统是Ubuntu 16.04.2。在Python 3中加载Python 2 .npy文件时出错
当我尝试在本地加载文件,我得到的错误:
ValueError: invalid literal for int() with base 16
通过一些#1提问浏览后,我试图指定与编码:
np.load('filename.npy',encoding='latin1')
这给了同样的错误。 encoding='bytes'
产量:
TypeError: can't multiply sequence by non-int of type 'float'
这里是回溯较大片段:
/usr/local/lib/python3.5/dist-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
417 else:
418 return format.read_array(fid, allow_pickle=allow_pickle,
--> 419 pickle_kwargs=pickle_kwargs)
420 else:
421 # Try a pickle
/usr/local/lib/python3.5/dist-packages/numpy/lib/format.py in read_array(fp, allow_pickle, pickle_kwargs)
638 pickle_kwargs = {}
639 try:
--> 640 array = pickle.load(fp, **pickle_kwargs)
641 except UnicodeError as err:
642 if sys.version_info[0] >= 3:
/usr/local/lib/python3.5/dist-packages/sympy/core/numbers.py in __new__(cls, num, prec)
823 else:
824 _mpf_ = mpmath.mpf(
--> 825 S.NegativeOne**num[0]*num[1]*2**num[2])._mpf_
826 elif isinstance(num, Float):
827 _mpf_ = num._mpf_
TypeError: can't multiply sequence by non-int of type 'float'
我想的东西与编码出错的Python和NumPy的版本之间的过渡。关于如何导入文件的任何想法?
你不能在Python 3中加载Python 2 Numpy字节码,反之亦然,它只是没有任何意义去尝试。你有没有尝试加载python 2中的.npy文件?因为你已经安装了python 2,如果你使用的是ubuntu – cat
这通常是不可能的吗?我想我之前在Python 3中导入了Python 2 .npy文件,并且一切都很顺利。我无法确定它为什么没有导致错误之前...在Python 2加载文件的作品。 (我在笔记本单元的开头插入'%% python2'来这样做)。但是使用Python 2会导致更多的错误,以至于我一直在寻找解决方案来坚持使用Python 3来使用这些文件。 –
你知道这个文件里面有什么?只是一个数组数组?或某种“对象”。错误在'pickle_load'中,暗示后面。酸洗对象时,'np.save'文档在PY2/3兼容性方面有一些注意事项。 – hpaulj