首页 > 解决方案 > 为什么 np.argmax(None) 返回 0 而不会抛出异常?

问题描述

根据Numpy 的 argmax 文档,我们传递给的第一个参数np.argmax必须是一个数组。

如果数组是一个空列表,我们会得到ValueError Exception

import numpy as np
print(np.argmax([]))

ValueError:尝试获取空序列的 argmax

但是,如果我们None作为第一个参数传递给np.argmax,我们会得到0输出。

import numpy as np
print(np.argmax(None))

0

我觉得奇怪的是,当它被传递一个数组(尽管是空的,但仍然是一个数组)给我们时,np.argmax我们得到一个异常,但是当它被传递不是一个数组(None)时,程序运行没有错误。


我的问题:

  1. 为什么它不返回异常,因为None它不是数组?
  2. 为什么返回0?

标签: pythonpython-3.xpython-2.7numpyargmax

解决方案


的输入不需要numpy.argmax是数组 - 您误读了文档。输入是一个类似数组的,结果证明它几乎没有限制输入。几乎任何东西都是类数组,包括,它被认为是 dtype 的 0 维类数组。“类数组”不是限制输入,而是真正描述了输入的解释方式——如果一个参数被记录为类数组,NumPy 将尝试将其视为一个数组,通常相当于调用。Noneobjectasarray

如果您不传递axis, argmax 会将输入视为展平,因此您的调用等效于numpy.argmax(numpy.array([None])). None不可比较,但numpy不知道这一点,因为它没有什么可比较None的 - 只有一个输入元素,默认情况下,一个输入元素被认为是最大值。argmax返回0,扁平化输入中唯一元素的索引。


推荐阅读