On 28.08.2021 14:33, Richard Damon wrote: > On 8/28/21 6:23 AM, Marc-Andre Lemburg wrote: >> To me, the behavior looked a lot like stripping NANs left and right >> from the list, but what you're explaining makes this appear even more >> as a bug in the implementation of median() - basically wrong assumptions >> about NANs sorting correctly. The outcome could be more or less random, it >> seems. > > It isn't a 'bug in median()' making the wrong assumption about NANs > sorting, it is an error in GIVING median a NAN which violates its > precondition that the input have a total-order by the less than operator.
That precondition is not documented as such, though: https://docs.python.org/3/library/statistics.html#statistics.median > Asking for the median value of a list that doesn't have a proper total > order is a nonsense question, so you get a nonsense answer. Leaving aside that many programmers will probably not know that NANs cause the total ordering of Python floats to fail (even though they are of type float), you'd expect Python to do the right thing and either: - raise an exception or - apply a work-around to regain total ordering, as suggested by Steven, or - return NAN for the calculation as NumPy does. >>> import statistics >>> statistics.median([1,2,3]) 2 >>> nan = float('nan') >>> statistics.median([1,2,3,nan]) 2.5 >>> statistics.median([1,2,nan,3]) nan >>> statistics.median([1,nan,2,3]) nan >>> statistics.median([nan,1,2,3]) 1.5 >>> nan < 1 False >>> nan < nan False >>> 1 < nan False vs. >>> import numpy as np >>> nan = np.nan >>> np.median(np.array([1,2,3,nan])) nan >>> np.median(np.array([1,2,nan,3])) nan >>> np.median(np.array([1,nan,2,3])) nan >>> np.median(np.array([nan,1,2,3])) nan >>> nan < nan False >>> nan < 1 False >>> 1 < nan False > It costs too much to have median test if the input does have a total > order, just to try to report this sort of condition, that it won't be > done for a general purpose operation. If NumPy can do it, why not Python ? -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Experts (#1, Aug 28 2021) >>> Python Projects, Coaching and Support ... https://www.egenix.com/ >>> Python Product Development ... https://consulting.egenix.com/ ________________________________________________________________________ ::: We implement business ideas - efficiently in both time and costs ::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 https://www.egenix.com/company/contact/ https://www.malemburg.com/ _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/MZKELO2RCFVC6L6NC7AAHLGDHJR6LKMQ/ Code of Conduct: http://python.org/psf/codeofconduct/