为什么 np.argmax(None) return 0 而不是抛出异常?
Why does np.argmax(None) return 0 and not throw an Exception?
根据Numpy's argmax documentation,我们传递给np.argmax
的第一个参数必须是一个数组。
如果数组是空列表,我们得到 ValueError Exception
:
import numpy as np
print(np.argmax([]))
ValueError: attempt to get argmax of an empty sequence
但是,如果我们将 None
作为第一个参数传递给 np.argmax
,我们将得到 0
作为输出。
import numpy as np
print(np.argmax(None))
0
我觉得很奇怪,当它传递一个数组(虽然是空的,但仍然是一个数组)给 np.argmax
我们得到一个异常但是当它被传递时 NOT数组 (None
) 程序运行无误。
我的问题:
- 为什么 return 不是异常,因为
None
不是数组?
- 为什么 return 0?
numpy.argmax
的输入 不是 数组所必需的 - 您误读了文档。输入是一个 类数组 ,结果几乎没有限制输入。几乎任何东西都是类数组,包括 None
,它被认为是 object
dtype 的 0 维类数组。 “类数组”并没有限制输入,而是真正描述了输入将如何被解释——如果一个参数被记录为类数组,NumPy 将尝试将其视为一个数组,通常相当于一个 asarray
打电话。
如果您不传递 axis
,argmax 会将输入视为扁平化,因此您的调用等同于 numpy.argmax(numpy.array([None]))
。 None
没有可比性,但是 numpy
不知道这一点,因为它没有什么可以与 None
进行比较 - 只有一个输入元素,并且那个输入元素被认为是最大的默认。 argmax
returns 0
,扁平化输入中唯一元素的索引。
根据Numpy's argmax documentation,我们传递给np.argmax
的第一个参数必须是一个数组。
如果数组是空列表,我们得到 ValueError Exception
:
import numpy as np
print(np.argmax([]))
ValueError: attempt to get argmax of an empty sequence
但是,如果我们将 None
作为第一个参数传递给 np.argmax
,我们将得到 0
作为输出。
import numpy as np
print(np.argmax(None))
0
我觉得很奇怪,当它传递一个数组(虽然是空的,但仍然是一个数组)给 np.argmax
我们得到一个异常但是当它被传递时 NOT数组 (None
) 程序运行无误。
我的问题:
- 为什么 return 不是异常,因为
None
不是数组? - 为什么 return 0?
numpy.argmax
的输入 不是 数组所必需的 - 您误读了文档。输入是一个 类数组 ,结果几乎没有限制输入。几乎任何东西都是类数组,包括 None
,它被认为是 object
dtype 的 0 维类数组。 “类数组”并没有限制输入,而是真正描述了输入将如何被解释——如果一个参数被记录为类数组,NumPy 将尝试将其视为一个数组,通常相当于一个 asarray
打电话。
如果您不传递 axis
,argmax 会将输入视为扁平化,因此您的调用等同于 numpy.argmax(numpy.array([None]))
。 None
没有可比性,但是 numpy
不知道这一点,因为它没有什么可以与 None
进行比较 - 只有一个输入元素,并且那个输入元素被认为是最大的默认。 argmax
returns 0
,扁平化输入中唯一元素的索引。