python - 为什么 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
)时,程序运行没有错误。
我的问题:
- 为什么它不返回异常,因为
None
它不是数组? - 为什么返回0?
解决方案
的输入不需要numpy.argmax
是数组 - 您误读了文档。输入是一个类似数组的,结果证明它几乎没有限制输入。几乎任何东西都是类数组,包括,它被认为是 dtype 的 0 维类数组。“类数组”不是限制输入,而是真正描述了输入的解释方式——如果一个参数被记录为类数组,NumPy 将尝试将其视为一个数组,通常相当于调用。None
object
asarray
如果您不传递axis
, argmax 会将输入视为展平,因此您的调用等效于numpy.argmax(numpy.array([None]))
. None
不可比较,但numpy
不知道这一点,因为它没有什么可比较None
的 - 只有一个输入元素,默认情况下,一个输入元素被认为是最大值。argmax
返回0
,扁平化输入中唯一元素的索引。
推荐阅读
- apache-spark - 读取配置单元管理表时,Spark sql 返回空数据帧
- javascript - 如何以非网格形式显示圆圈
- inno-setup - 弹出对话框背景表单颜色
- android - 无法从我的 BLE 设备读取测量值,writeCharacteristic 总是返回 false
- php - Laravel 使用 cpanel 抛出 QueryException:“找不到驱动程序”
- java - Mac 上的 ProcessBuilder
- docker-compose - 将 docker-compose 中的副本定义为整数变量
- angular - ng5-slider 高值设置在错误的位置
- python-3.x - “ModuleNotFoundError: No module named 'engine'” 的原因是什么以及如何解决?
- java - 将字符串转换为日期时间 java