[Numpy-discussion] Nansum function behavior

Charles Rilhac webmastertux1 at gmail.com
Fri Oct 23 20:47:28 EDT 2015


Why do we keep this behaviour ? : 
np.nansum([np.nan]) # zero

Firstly, you lose information. 
You can easily fill nan with zero after applying nansum but you cannot keep nan for nan-full rows if you doesn’t have a mask or keep the information about nan-full row before.
It is not convenient, useful.
Secondly, it is illogical. A arithmetic operation or whatever else between Nothing and Nothing cannot return Something.
We can accept that Nothing + Object = Object but we cannot get a figure from nothing. It is counterintuitive. I really disagree with this change happened few years ago.


> On 24 Oct 2015, at 01:11, Benjamin Root <ben.v.root at gmail.com> wrote:
> 
> The change to nansum() happened several years ago. The main thrust of it was to make the following consistent:
> 
> np.sum([])  # zero
> np.nansum([np.nan])  # zero
> np.sum([1])  # one
> np.nansum([np.nan, 1])  # one
> 
> If you want to propagate masks and such, use masked arrays.
> Ben Root
> 
> 
> On Fri, Oct 23, 2015 at 12:45 PM, Charles Rilhac <webmastertux1 at gmail.com <mailto:webmastertux1 at gmail.com>> wrote:
> Hello,
> 
> I noticed the change regarding nan function and especially nansum function. I think this choice is a big mistake. I know that Matlab and R have made this choice but it is illogical and counterintuitive.
> 
> First argument is about logic. An arithmetic operation between Nothing and Nothing cannot make a figure or an object. Nothing + Object can be an object or something else, but from nothing, it cannot ensue something else than nothing. I hope you see what I mean.
> 
> Secondly, it's counterintuitive and not convenient. Because, if you want to fill the result of nanfunction you can do that easily :
> 
> a = np.array([[np.nan, np.nan], [1,np.nan]])
> a = np.nansum(a, axis=1)
> print(a)
> array([np.nan,  1.])
> a[np.isnan(a)] = 0
> Whereas, if the result is already filled with zero on NaN-full rows, you cannot replace the result of NaN-full rows by NaN easily. In the case above, you cannot because you lost information about NaN-full rows.
> 
> I know it is tough to come back to a previous stage but I really think that it is wrong to absolutely fill with zeros the result of arithmetic operation containing NaN.
> 
> Thank for your work guys ;-)
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org <mailto:NumPy-Discussion at scipy.org>
> https://mail.scipy.org/mailman/listinfo/numpy-discussion <https://mail.scipy.org/mailman/listinfo/numpy-discussion>
> 
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> https://mail.scipy.org/mailman/listinfo/numpy-discussion

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20151024/e3cb3ea2/attachment.html>


More information about the NumPy-Discussion mailing list