使用np.load()加载数据 报错 Object arrays cannot be loaded when allow_pickle=False

解决 np.load() 限制:对象数组加载失败的技巧
本文详细探讨了在使用numpy的load函数时遇到Object arrays cannot be loaded when allow_pickle=False问题的解决方案,针对Python数据处理中可能遇到的pickle相关限制给出实用建议。
你遇到的错误: ``` 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、付费专栏及课程。

余额充值