numpy.max vs builtin max

时间:2015-07-26 13:20:21

标签: python numpy

numpy.maxmax之间有什么区别?我的理解是使用numpy.max的主要优点是它可以处理多维数组,但是它们在以下方面表现不同:

In [1]: import numpy as np

In [2]: max([1, float('nan')])
Out[2]: 1

In [3]: max([float('nan'), 1])
Out[3]: nan

In [4]: np.max([1, float('nan')])
Out[4]: nan

In [5]: np.max([float('nan'), 1])
Out[5]: nan

这表明numpy.maxmax对待"最大"的基本理念。换句话说,至少在某些边缘情况下,例如这样。有两个函数采用不同约定的原因,特别是为什么max的行为取决于排序?

1 个答案:

答案 0 :(得分:1)

nan无法比较;以下全部返回False

  • 1 < float('nan')
  • 1 > float('nan')
  • float('nan') < 1
  • float('nan') > 1

如果您假设它的工作方式如下,则可以解释max的行为:假设列表中的第一个元素是最大的,将当前最大元素与列表中的下一个元素进行比较,并采用下一个元素元素if next > current。由于与float('nan')的比较总是会返回False,如果它是比较的左手操作数,max会认为它是最大的元素,但如果它是正确的,则认为它是最小的 - 手操作。

np.max的行为似乎通过返回涉及nan的任何操作来正确处理nan。也就是说,nan不仅是任何列表的最大值,还包括最小值,中值,或总和,或产品等。