You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法获取.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:02:37