无法获取.npy文件中存储的字典元素长度的问题排查
问题解析:为什么无法获取.npy文件中字典的元素长度?
嘿,我来帮你搞清楚这个小坑~你忽略的核心点是:用np.load加载存了字典的.npy文件时,返回的不是直接的字典对象,而是一个包裹着字典的0维numpy数组!
你看,当你执行file = np.load('cls_labels.npy', allow_pickle=True),这个file其实是一个形状为()的numpy数组,里面唯一的元素就是你存储的那个字典。所以你调用file.size得到的是1——这是数组里元素的数量,而不是字典的键值对数量。
解决办法很简单:先把字典从数组里取出来
有两种常用方式:
- 新版numpy推荐用
file[()](更直观,也避免.item()的版本兼容问题) - 旧版numpy可以用
file.item()
取出来之后,你就能像操作普通字典一样获取长度、添加/修改元素了。给你个完整的示例代码:
import numpy as np # 加载文件并提取字典 loaded_data = np.load('cls_labels.npy', allow_pickle=True) label_dict = loaded_data[()] # 取出数组里的字典对象 # 获取字典的元素数量(键值对个数) print(f"字典里的元素数量: {len(label_dict)}") # 示例:添加新的图像标签对 label_dict['2024_000001'] = np.array([1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=np.float32) # 示例:修改已有标签 label_dict['2007_002760'] = np.array([0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=np.float32) # 保存修改后的字典回.npy文件 np.save('cls_labels_updated.npy', label_dict, allow_pickle=True)
再补充个小知识点
如果你想确认loaded_data的类型,可以打印type(loaded_data),会看到输出是<class 'numpy.ndarray'>;而type(label_dict)会输出<class 'dict'>,这时候用len()就完全正常啦。
内容的提问来源于stack exchange,提问作者Sharhad Bashar
相关产品推荐
相关产品推荐

