为何numpy.argmax()无法正确处理Python中dict.values()的结果?
字典values()传入np.argmax时的索引错误问题
示例代码
import numpy as np d = {'a': 10, 'b': 11, 'c':12} print(d) # 输出 {'a': 10, 'b': 11, 'c': 12}
问题现象
想获取d.values()中最大值的索引,结果不符合预期:
print(np.argmax(d.values())) # 输出 0(正确索引应为2)
但直接传入列表时结果正常:
print(d.values()) # 输出 dict_values([10, 11, 12]) print(np.argmax([10, 11, 12])) # 输出 2(正确)
原因说明
dict.values()返回的不是真正的列表,而是dict_values视图对象——它属于迭代器类的对象,并非NumPy能直接正确解析的序列类型。- NumPy的
np.argmax在处理这类非序列迭代器时,不会遍历所有元素,而是将整个迭代器视为单个"元素",或者仅读取迭代器的第一个元素进行判断,因此错误返回了索引0。 - 当传入真实列表
[10,11,12]时,NumPy能识别这是一维序列,会遍历所有元素找到最大值对应的索引,结果自然正确。
解决办法
把dict_values转成列表后再传入:
print(np.argmax(list(d.values()))) # 输出 2(正确)
内容的提问来源于stack exchange,提问作者FrankHan
相关产品推荐
相关产品推荐

