关于Numpy中min函数传入函数对象时返回函数本身的疑问咨询
关于Numpy中min函数传入函数对象时返回函数本身的疑问咨询
嘿,这个问题挺有意思的,我来给你拆解一下~
首先,咱们得先搞清楚numpy.min(它和numpy.amin其实是同一个东西)的核心设计逻辑:它本来就是用来对数组或者可迭代序列做最小值计算的。但当你传入的不是数组/可迭代对象,而是一个函数这种普通Python对象时,numpy会怎么处理呢?
numpy在处理输入时,第一步通常会尝试把输入转换成numpy数组。但函数对象是没法转成数组的,这时候numpy就会触发一种“直接传递”的 fallback 行为——简单说就是,既然我处理不了这个输入,那我就原封不动把它还给你,不会随便报错打断你的代码。
这就解释了你例子里的现象:
- 当你传
get_third_value或者内置函数max给np.min时,numpy发现这不是它能处理的数组/可迭代结构,所以直接把函数本身返回给你。 - 所以你写
np.min(max)(xx)的时候,其实等价于先拿到max函数,再用xx作为参数调用它,结果自然就是xx的最大值9;同理np.min(get_third_value)(xx)就是调用你定义的取第三个元素的函数,得到2。
那这是不是预期行为?其实可以算是numpy设计时的一种边界情况处理。numpy的重心全在数组计算上,对于非数组的Python对象,它不会强行抛出错误(除非是明确不支持的类型),而是尽可能做合理的兼容。这种直接返回原对象的行为,就是为了在遇到无法处理的输入时,不破坏上层代码的执行——当然,这确实会让不了解这个逻辑的人摸不着头脑,就像你一开始的困惑一样。
你提到其他numpy函数也有这个情况,其实也很好理解:比如np.max、np.mean这类函数,核心逻辑都是先尝试转数组,转不了就直接返回原对象,本质都是同一个原因。
备注:内容来源于stack exchange,提问作者Alimanco
相关产品推荐
相关产品推荐

