在Google Colab加载大numpy对象时遇UnpicklingError: pickle data was truncated
解决Colab中加载大型numpy文件出现
UnpicklingError: pickle data was truncated的问题 在Google Colab中执行以下代码加载大型numpy对象时:
data = np.load('sample_data/train_data.npy', allow_pickle = True)
触发错误:
UnpicklingError: pickle data was truncated
本地执行相同代码无异常,且已确认train_data.npy已上传至Colab环境,常规解决方案无效。
以下是针对性的解决方法:
校验文件完整性
上传后对比本地与Colab中文件的大小,在Colab终端执行:!ls -lh sample_data/train_data.npy将输出的文件大小和本地文件大小对比,若不一致说明上传过程中文件损坏,需重新上传(建议通过Google Drive挂载上传,比直接拖传更稳定)。
分块加载大型文件
若文件完整但因体积过大导致加载失败,尝试分块读取:import numpy as np with open('sample_data/train_data.npy', 'rb') as f: # 读取numpy文件头信息 magic = f.read(6) version = np.lib.format.read_magic(magic) header = np.lib.format.read_array_header_1_0(f) dtype = header['descr'] shape = header['shape'] # 设置分块大小(可根据内存调整) chunk_size = 1000 data = np.empty(shape, dtype=dtype) # 逐块读取并填充数组 for i in range(0, shape[0], chunk_size): end_idx = min(i + chunk_size, shape[0]) data[i:end_idx] = np.load(f, allow_pickle=True)通过Google Drive挂载读取文件
直接拖传大文件易出现中断或损坏,挂载Google Drive后从Drive读取更可靠:from google.colab import drive drive.mount('/content/drive') # 替换为你在Drive中的文件路径 data = np.load('/content/drive/MyDrive/your_folder/train_data.npy', allow_pickle=True)本地重新预处理numpy文件
若本地文件正常但Colab加载异常,可在本地重新保存文件,调整保存参数后再上传:# 本地环境执行 import numpy as np local_data = np.load('train_data.npy', allow_pickle=True) # 禁用压缩重新保存 np.save('train_data_reprocessed.npy', local_data, allow_pickle=True)将新生成的
train_data_reprocessed.npy上传至Colab尝试加载。
内容的提问来源于stack exchange,提问作者Bard
相关产品推荐
相关产品推荐

