Object arrays cannot be loaded when allow_pickle=False问题的解决

本文记录了在运行《Python深度学习》一书中的代码时遇到的关于numpy版本的错误。通过将numpy版本回退到1.15.4,成功解决了问题。文章提供了检查和安装指定版本numpy的pip命令。

说明:此问题是我在运行《Python深度学习》一书中下载路透社数据集时遇到的错误。

解决方案是将numpy版本的降低至1.6以下即可解决莫名报错

记录两个命令:

pip show numpy #显示 numpy 的版本号
pip install -U numpy==1.15.4    #自定义版本号安装 numpy

 

你遇到的错误: ``` ValueError: Object arrays cannot be loaded when allow_pickle=False ``` 是因为你尝试加载的 `.npy` 文件是一个 **object 类型数组(即包含字符串、混合类型等非数值类型的数据)**,而 `numpy.load()` 默认参数 `allow_pickle=False`,不允许加载这种类型的数据。 --- ### ✅ 解决方法: 你需要在加载时设置参数 `allow_pickle=True`,如下所示: ```python import numpy as np # 加载 .npy 文件时允许加载 object 类型数组 loaded_array = np.load('data_array.npy', allow_pickle=True) print(loaded_array) ``` --- ### ✅ 原因说明: - `.npy` 文件中如果保存的是 **object 类型数组**(例如包含字符串、列表、字典等),会使用 Python 的 `pickle` 协议进行序列化。 - 从 **NumPy 1.16.3 开始,默认 `allow_pickle=False`**,这是出于安全考虑,防止执行恶意的 pickle 数据。 - 所以,**如果你确认文件来源可信**,可以放心使用 `allow_pickle=True`。 --- ### ✅ 示例:保存和加载 object 数组 ```python import numpy as np # 创建一个 object 类型的数组(包含字符串) data_array = np.array([['男', '北京', '正常'], ['女', '上海', '异常']], dtype=object) # 保存为 .npy 文件 np.save('data_array.npy', data_array) # 加载时必须设置 allow_pickle=True loaded_array = np.load('data_array.npy', allow_pickle=True) print("加载后的数组:") print(loaded_array) ``` --- ### ✅ 注意事项: | 情况 | 是否需要 `allow_pickle=True` | 说明 | |------|-------------------------------|------| | 纯数值数组(如 int、float) | ❌ 不需要 | 可以使用默认方式加载 | | 字符串数组、混合类型数组、包含 list/dict 的数组 | ✅ 需要 | 必须设置 `allow_pickle=True` | | 不信任的 `.npy` 文件 | ⚠️ 警惕 | 使用 `allow_pickle=True` 可能存在安全风险 | --- ### ✅ 延伸建议: 如果你希望避免使用 `object` 类型数组,可以考虑: - 对字符串进行 **标签编码(Label Encoding)** - 使用 **独热编码(One-Hot Encoding)** - 将数据保存为 `.csv` 或 `.h5` 等结构化格式 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值