如何将由numpy数组组成的字典输出到文件?
嘿,我来给你分享几个把numpy数组组成的字典输出到文件的实用方法,结合你已经导入的那些库,这些方案都很容易实现:
方法1:使用numpy原生的
savez/savez_compressed(推荐) 这是处理numpy数组字典最直接的方式,numpy内置的savez可以把多个数组打包成一个.npz文件,字典的键可以直接作为数组的标识。如果数据量较大,savez_compressed还能压缩文件节省磁盘空间。
# 假设你的numpy数组字典是这样的(替换成你实际的字典) numpy_array_dict = { 'image_features': np.random.rand(100, 2048), # 比如VGG19提取的特征 'label_arrays': np.random.randint(0, 10, size=(100,)) } # 保存为未压缩的.npz文件 np.savez('numpy_dict_output.npz', **numpy_array_dict) # 如果要压缩版本,改用这个: # np.savez_compressed('numpy_dict_output_compressed.npz', **numpy_array_dict)
读取文件的方式:
# 加载.npz文件 loaded_data = np.load('numpy_dict_output.npz') # 通过字典的键访问对应的numpy数组 loaded_features = loaded_data['image_features'] loaded_labels = loaded_data['label_arrays'] # 记得用完后关闭文件对象 loaded_data.close()
这个方法的优势是完全适配numpy数组,不需要额外依赖,读取速度快,压缩版本对大数组非常友好。
方法2:使用
pickle序列化整个字典 如果你需要保存的字典里除了numpy数组还有其他Python对象,pickle会是个不错的选择——它可以序列化几乎所有Python原生结构,包括包含numpy数组的字典。
import pickle # 没导入的话加这句就行 # 写入文件 with open('numpy_dict_pickle.pkl', 'wb') as f: pickle.dump(numpy_array_dict, f) # 读取文件 with open('numpy_dict_pickle.pkl', 'rb') as f: loaded_dict = pickle.load(f) # 直接访问字典里的数组 print(loaded_dict['image_features'].shape)
⚠️ 注意:pickle存在安全风险,不要加载来自不信任来源的.pkl文件,避免恶意代码执行。
方法3:使用
h5py(适合超大规模数组) 如果你的numpy数组特别大(比如GB级),h5py支持分块存储和随机访问,比前两种方法更高效。不过需要先安装它:pip install h5py
import h5py # 保存字典 with h5py.File('numpy_dict_h5.h5', 'w') as hf: for key, array in numpy_array_dict.items(): hf.create_dataset(key, data=array) # 读取字典 with h5py.File('numpy_dict_h5.h5', 'r') as hf: loaded_dict = {key: hf[key][:] for key in hf.keys()}
这个方法适合需要处理超大数据集的场景,支持部分读取数组,不用一次性加载到内存。
内容的提问来源于stack exchange,提问作者fatma
相关产品推荐
相关产品推荐

