如何用np.load()加载.npy字典并提取嵌套的字典对象
问题:恢复保存为.npy文件的字典格式
我有一个字典,格式如下:
{image_name.jpg:[list_of_features], image_name2.jpg:[list of it's features]}
通过np.save('encoded_img_dic.npy', encoded_img_dic)将其保存为.npy文件,再用dic = np.load('/content/encoded_img_dic.npy', allow_pickle = True)加载后,得到的是一个嵌套字典的numpy数组:
array({'1000092795.jpg': array([ 0.18229158, -0.17214337, -0.07549195, ..., -0.01746007, -0.10297356, 0.35006437], dtype=float32), '10002456.jpg': array([-0.10733618, -0.08182468, -0.1734893 , ..., -0.13148569, -0.12901662, -0.09519334], dtype=float32), '99804383.jpg': array([-0.10597093, -0.1605651 , -0.08017335, ..., 0.03384358, 0.58321196, -0.06605151], dtype=float32), '998845445.jpg': array([-0.13575825, 0.55340654, -0.01252322, ..., 0.37376422, 0.02249258, 0.09976979], dtype=float32)}, dtype=object)
需要提取内部字典,并将每个值从numpy数组转为普通列表,恢复成目标格式:
{'1000092795.jpg': [ 0.18229158, -0.17214337, -0.07549195, ..., -0.01746007, -0.10297356, 0.35006437], '10002456.jpg': [-0.10733618, -0.08182468, -0.1734893 , ..., -0.13148569, -0.12901662, -0.09519334], '99804383.jpg': [-0.10597093, -0.1605651 , -0.08017335, ..., 0.03384358, 0.58321196, -0.06605151], '998845445.jpg':[-0.13575825, 0.55340654, -0.01252322, ..., 0.37376422, 0.02249258, 0.09976979]}
解决步骤
1. 提取numpy数组中的字典
加载后的数组仅包含单个字典元素,直接通过索引提取内部字典:
# 方法1:使用[()]提取(推荐,适配任意维度的单元素数组) original_dict = dic[()] # 方法2:使用[0]提取(当确认数组是一维单元素时) original_dict = dic[0]
2. 将字典值转为列表
遍历字典的键值对,利用numpy数组的tolist()方法将其转为普通Python列表:
restored_dict = {key: value.tolist() for key, value in original_dict.items()}
完整代码示例
import numpy as np # 加载保存的.npy文件 loaded_array = np.load('/content/encoded_img_dic.npy', allow_pickle=True) # 提取内部字典 extracted_dict = loaded_array[()] # 转换所有值为列表 final_dict = {k: v.tolist() for k, v in extracted_dict.items()} # 验证结果 print(final_dict)
内容的提问来源于stack exchange,提问作者Adarsh Wase
相关产品推荐
相关产品推荐

