max(float('nan'), 1) evaluates to nan
max(1, float('nan')) evaluates to 1
Is it the intended behavior?
Thanks for the answers.
max raises an exception when the iterable is empty. Why wouldn't Python's max raise an exception when nan is present? Or at least do something useful, like return nan or ignore nan. The current behavior is very unsafe and seems completely unreasonable.
I found an even more surprising consequence of this behavior, so I just posted a related question.
The Python max() function is used to find the largest value in a list of values. The Python min() function is used to find the lowest value in a list. The list of values can contain either strings or numbers. You may encounter a situation where you want to find the minimum or maximum value in a list or a string.
To find the maximum or minimum of a sequence, you must look at each element once, thus you can't get better than O(n). Of course, Python min and max have O(n) too: docs. You can write your own min/max function with a for loop and it will have the same complexity, but will be slower because it is not optimized in C.
You give min three individual arguments, the smallest of which being -1 . So, the return value of the call to min is -1 . Like max , min supports the keyword argument named key so that you can pass objects more complex than numbers into it.
Use Python's min() and max() to find smallest and largest values in your data. Call min() and max() with a single iterable or with any number of regular arguments. Use min() and max() with strings and dictionaries.
In [19]: 1>float('nan') Out[19]: False In [20]: float('nan')>1 Out[20]: False The float nan is neither bigger nor smaller than the integer 1. max starts by choosing the first element, and only replaces it when it finds an element which is strictly larger.
In [31]: max(1,float('nan')) Out[31]: 1 Since nan is not larger than 1, 1 is returned.
In [32]: max(float('nan'),1) Out[32]: nan Since 1 is not larger than nan, nan is returned.
PS. Note that np.max treats float('nan') differently:
In [36]: import numpy as np In [91]: np.max([1,float('nan')]) Out[91]: nan In [92]: np.max([float('nan'),1]) Out[92]: nan but if you wish to ignore np.nans, you can use np.nanmax:
In [93]: np.nanmax([1,float('nan')]) Out[93]: 1.0 In [94]: np.nanmax([float('nan'),1]) Out[94]: 1.0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With