当前位置: 首页 > 知识库问答 >
问题:

为什么NaN值使min和max对顺序敏感?[副本]

姬捷
2023-03-14
> import numpy as np

> min(50, np.NaN)
50   
> min(np.NaN, 50)
nan

max也会出现相同的行为)

我知道可以通过使用numpy.nanmin来避免这种行为。但当顺序颠倒时,是什么原因导致变化的呢?min对输入顺序是否敏感?

共有1个答案

何向荣
2023-03-14

min对输入顺序是否敏感?

是的。

https://docs.python.org/3/library/functions.html#分钟

为了证实这个假设,我们可以阅读源代码(在https://github.com/python/cpython/blob/c96d00e88ead8f99bb6aa1357928ac4545d9287c/python/bltinmodule.c中搜索builtin_min和min_max),这有点让人困惑,因为min和max的实现是组合的,变量名似乎基于它是max函数,但不难理解。

而且它确实会按顺序遍历元素,并通过调用PyObject_RichCompareBool执行比较,其“opid”为Py_LT(相当于python<运算符的C API)。

在NaN和numbers之间的比较返回false,所以在包含numbers和NaN的列表中,如果第一个位置有NaN,它将被认为是最小值,因为没有任何数字会“小于”它。另一方面,如果NaN不在第一位置,那么它将被有效地跳过,因为它不“小于”任何数字。

 类似资料:
  • 注意:这个问题源自一个死的链接,这是以前的一个SO问题,但这里是... 看到这段代码(注意:我确实知道这段代码不会“工作”,应该使用--我只是从链接的问题中提取出来的): 根据和的javadoc,两者的参数都应该是一个。然而,这里的方法引用是类的静态方法。

  • 问题内容: 注意:这个问题源自于先前的SO问题的无效链接,但是这里… 参见下面的代码(注意:我确实知道该代码不会“起作用”,应该使用-我只是从链接的问题中提取了它): 据javadoc的和,两者的参数应该是一个。然而,这里的方法引用是针对Integer该类的静态方法的。 那么,为什么要编译呢? 问题答案: 让我解释一下这里发生的事情,因为它并不明显! 首先,接受的一个实例,以便可以将流中的项目彼此

  • 问题内容: 在理解Java JDBC ResultSet Types时,有两种滚动类型TYPE_SCROLL_SENSITIVE和TYPE_SCROLL_INSENSITIVE,我知道。但是当我进行实际实施时,我没有看到效果。下面是代码: 当程序到达LINE 39时,我从后端更新了数据库以进行记录。对于TYPE_SCROLL_INSENSITIVE,它不显示应执行的更新记录,但对于TYPE_SCR

  • 问题内容: 为什么返回 Javascript? 在文档页面上,我看到以下内容: ## 针对NaN的测试 相等运算符(和)不能用于测试的值。使用代替。 有没有参考资料可以回答这个问题?不客气。 问题答案: 严格的回答 :因为JS规范是这样说的: 如果Type(x)是Number,则 如果x为NaN,则返回false。 如果y为NaN,则返回false。 有用的答案 :浮点数的IEEE 754规范(所

  • 本文向大家介绍width属性的min-content和max-content有什么作用?相关面试题,主要包含被问及width属性的min-content和max-content有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 max-content 在一个父元素上设置该元素后,元素的宽度会以子元素内最长的一个为准,子元素表现得会好像设置了white-space:nowrap一样一行展示 mi

  • 我发现 比 Python 2 和 3 中的函数慢。 Python 2 蟒蛇 3 为什么<code>max</code>(<code>O(n)</code>)比<code>sort</code>函数(<code<O(nlogn)</code>)慢?