• 售前

  • 售后

热门帖子
入门百科

python3 怎样读取python2的npy文件

[复制链接]
天使粉粉魏 显示全部楼层 发表于 2021-10-26 14:06:54 |阅读模式 打印 上一主题 下一主题
python3读取python2打包的npy文件会报错,缘故原由是编码方式差别,以是只要在读取的时间加上编码方式即可。
办理方法
  1. docs_train = np.load('./data/20news_clean/train.txt.npy', allow_pickle=True, encoding='bytes')
  2. docs_test = np.load('./data/20news_clean/test.txt.npy', allow_pickle=True, encoding='bytes')
复制代码
路径中的文件是python2打包的。
增补:在Python 3中加载Python 2 .npy文件时出错
我有.npy文件,它们是使用Python 2.7.9和Numpy版本1.11.3通过命令创建的np.save('filename')。这些文件是在外部计算机上生成的,该外部计算机是我们研究所的linux集群的一部分。
我将文件复制到当地计算机上,以便通过导入它们np.load('filename.npy')。在我的当地计算机上,我正在运行带有Jupyter-Notebook的Python 3.5.2和Numpy版本1.13.0。
当地利用系统是Ubuntu 16.04.2。
当我实行在当地加载文件时,出现错误:
  1. ValueError: invalid literal for int() with base 16
复制代码
欣赏了一些Stackoverflow问题后,我实行使用以下方式指定编码:
  1. np.load('filename.npy',encoding='latin1')
复制代码
这给出了雷同的错误。encoding='bytes'产量:
  1. TypeError: can't multiply sequence by non-int of type 'float'
复制代码
这是Traceback的较大片段:
  1. /usr/local/lib/python3.5/dist-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
  2. 417       else:
  3. 418         return format.read_array(fid, allow_pickle=allow_pickle,
  4. --> 419                     pickle_kwargs=pickle_kwargs)
  5. 420     else:
  6. 421       # Try a pickle
  7. /usr/local/lib/python3.5/dist-packages/numpy/lib/format.py in read_array(fp, allow_pickle, pickle_kwargs)
  8. 638       pickle_kwargs = {}
  9. 639     try:
  10. --> 640       array = pickle.load(fp, **pickle_kwargs)
  11. 641     except UnicodeError as err:
  12. 642       if sys.version_info[0] >= 3:
  13. /usr/local/lib/python3.5/dist-packages/sympy/core/numbers.py in __new__(cls, num, prec)
  14. 823         else:
  15. 824           _mpf_ = mpmath.mpf(
  16. --> 825             S.NegativeOne**num[0]*num[1]*2**num[2])._mpf_
  17. 826     elif isinstance(num, Float):
  18. 827       _mpf_ = num._mpf_
  19. TypeError: can't multiply sequence by non-int of type 'float'
复制代码
我猜想在Python和Numpy版本之间的转换时,编码有问题。关于怎样导入文件的任何想法?
办理方案

如中所示,*。npy中数据的存储方式是什么?,.npy文件为字节码,假如您在十六进制编辑器中打开一个字节码,则会看到该文件。
Python 2字节码.pyc,.pyo文件无法在Python 3中运行,由于假造机和编译器内部版本已随紧张版本更改。
同样,NumPy的C内部结构和字节码编译器在Python 3中也发生了变化,从而破坏了向后兼容性。(这是故意的,由于字节码并不是要连续那么长时间,或者不能与所创建的版本一起使用。)
这些变动的构成意味着,假如不对Python 3的字节码表明器和Python 3的NumPy举行大的更改,和/或从Python 2 NumPy字节码到Python 3的转译器,则无法使用这些Python 2 .npy文件。 Python 3。
正如我之条件到的,这有点像X / Y问题。您不应该依靠.npy文件在各个版本之间工作,由于不能包管它们会保持同等,由于它们本质上是易失性格式(例如Python VM字节码)。
与其对字节码举行逆向工程以对其举行调试,不如实行获取生成这些文件的源。
以上为个人履历,希望能给各人一个参考,也希望各人多多支持脚本之家。如有错误或未思量完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作