ValueError: Object arrays cannot be loaded when allow_pickle=False 异常的多种处理方式

本文针对更新numpy版本后使用numpy.load()出现的错误:Objectarrayscannotbeloadedwhenallow_pickle=False,提供了四种解决方法,包括回退版本、设置参数、修改函数行为及预设allow_pickle值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前更新到最新的numpy版本后,使用 numpy.load() 可能会报错:

ValueError: Object arrays cannot be loaded when allow_pickle=False

这是因为numpy版本不向下兼容所导致的,更新之前的numpy版本中(比如:1.16.1 或者 1.16.2版本)的load函数为:numpy.load(path),而更新后的load函数为:np.load(path, boolean) ,并且boolean (allow_pickle) 默认值为false。

所以报错:allow_pickle=False  。为此解决方法有多种,分别列出并作下对比:

方法一:

回退numpy的版本,可以解决这个问题:

pip uninstall numpy
pip install numpy==1.16.1

但是有童鞋就是不想回退版本,接着往下看。

方法二:

直接在numpy.load函数中设置allow_pickle=True:

datas = np.load('tang.npz', allow_pickle=True)

这样可以暂时解决问题,但不是长久之计,允许pickle可能会改变数组,保存之前和加载之后的.npz数组在试图使用numpy断言相等时会抛出异常。

看起来想简单的处理都不是好方法。

方法三:

这个方法比较神奇,相比与上面的方法还是更好一些:

# 在使用的时候创建一个副本,副本中allow_pickle=True
old = np.load
np.load = lambda *a,**k: old(*a,**k,allow_pickle=True)

datas = np.load('tang.npz')

# 使用完后重新换回来
np.load = old
del(old)

但是也会出现问题,就是运行一次没问题,第二次运行会报错:

TypeError: () got multiple values for keyword argument 'allow_pickle'

看起来还是没那么简单。所以再推荐一种解决办法。

方法四:

使用numpy.load函数之前先写一条代码设置值,之后再换回来:

np.load.__defaults__=(None, True, True, 'ASCII')
datas = np.load('tang.npz')
np.load.__defaults__=(None, False, True, 'ASCII')

到这里的话就是我查询到的全部解决方法,希望对大家有帮助。

下面是两条参考链接:

https://stackoverflow.com/questions/55890813/how-to-fix-object-arrays-cannot-be-loaded-when-allow-pickle-false-for-imdb-loa

https://stackoverflow.com/questions/57176714/how-to-fix-error-when-load-dataset-in-keras/57391693#57391693

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值