Hi,<br><br><div class="gmail_quote">On Mon, Jun 27, 2011 at 6:55 PM, Mark Wiebe <span dir="ltr">&lt;<a href="mailto:mwwiebe@gmail.com">mwwiebe@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>First I&#39;d like to thank everyone for all the feedback you&#39;re providing, clearly this is an important topic to many people, and the discussion has helped clarify the ideas for me. I&#39;ve renamed and updated the NEP, then placed it into the master NumPy repository so it has a more permanent home here:</div>

<div><br></div><a href="https://github.com/numpy/numpy/blob/master/doc/neps/missing-data.rst" target="_blank">https://github.com/numpy/numpy/blob/master/doc/neps/missing-data.rst</a><div><br></div><div>In the NEP, I&#39;ve tried to address everything that was raised in the original thread and in Nathaniel&#39;s followup &#39;Concepts&#39; thread. To deal with the issue of whether a mask is True or False for a missing value, I&#39;ve removed the &#39;mask&#39; attribute entirely, except for ufunc-like functions np.ismissing and np.isavail which return the two styles of masks. Here&#39;s a high level summary of how I&#39;m thinking of the topic, and what I will implement:</div>

<div><br></div><div><b>Missing Data Abstraction</b></div><div><br></div><div>There appear to be two useful ways to think about missing data that are worth supporting.</div><div><br></div><div>1) Unknown yet existing data</div>

<div>2) Data that doesn&#39;t exist</div><div><br></div><div>In 1), an NA value causes outputs to become NA except in a small number of exceptions such as boolean logic, and in 2), operations treat the data as if there were a smaller array without the NA values.</div>

<div><br></div><div><b>Temporarily Ignoring Data</b></div><div><b><br></b></div><div>In some cases, it is useful to flag data as NA temporarily, possibly in several different ways, for particular calculations or testing out different ways of throwing away outliers. This is independent of the missing data abstraction, still requiring a choice of 1) or 2) above.</div>

<div><br></div><div><b>Implementation Techniques</b></div><div><b><br></b></div><div>There are two mechanisms generally used to implement missing data abstractions,</div><div><b><br></b></div><div>1) An NA bit pattern</div>

<div>2) A mask</div><div><br></div><div>I&#39;ve described a design in the NEP which can include both techniques using the same interface. The mask approach is strictly more general than the NA bit pattern approach, except for a few things like the idea of supporting the dtype &#39;NA[f8,InfNan]&#39; which you can read about in the NEP.</div>

<div><br></div><div>My intention is to implement the mask-based design, and possibly also implement the NA bit pattern design, but if anything gets cut it will be the NA bit patterns.</div><div><br></div><div>Thanks again for all your input so far, and thanks in advance for your suggestions for improving this new revision of the NEP.</div>
</blockquote><div>A very impressive PEP indeed.</div><div><br></div><div>However, how would corner cases, like</div><div><span class="Apple-style-span" style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 18px; "><pre style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font: normal normal normal 12px/normal &#39;Bitstream Vera Sans Mono&#39;, Courier, monospace; line-height: 1.5em; font-size: 12px; background-color: rgb(238, 238, 238); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); color: rgb(68, 68, 68); overflow-x: auto; overflow-y: auto; -webkit-box-shadow: rgba(0, 0, 0, 0.0664063) 0px 1px 2px inset; border-top-left-radius: 3px 3px; border-top-right-radius: 3px 3px; border-bottom-right-radius: 3px 3px; border-bottom-left-radius: 3px 3px; ">
&gt;&gt;&gt; a = np.array([np.NA, np.NA], dtype=&#39;f8&#39;, masked=True)
&gt;&gt;&gt; np.mean(a, skipna=True)</pre></span><span class="Apple-style-span" style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 18px; "><pre style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; font: normal normal normal 12px/normal &#39;Bitstream Vera Sans Mono&#39;, Courier, monospace; line-height: 1.5em; font-size: 12px; background-color: rgb(238, 238, 238); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); color: rgb(68, 68, 68); overflow-x: auto; overflow-y: auto; -webkit-box-shadow: rgba(0, 0, 0, 0.0664063) 0px 1px 2px inset; border-top-left-radius: 3px 3px; border-top-right-radius: 3px 3px; border-bottom-right-radius: 3px 3px; border-bottom-left-radius: 3px 3px; ">
&gt;&gt;&gt; np.mean(a)</pre></span></div><div>be handled?</div><div><br></div><div>My concern here is that there always seems to be such corner cases which can only be handled with specific context knowledge. Thus producing 100% generic code to handle &#39;missing data&#39; is not doable.</div>
<div><br></div><div><br></div><div>Thanks,</div><div>- eat</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><br></div><font color="#888888"><div>-Mark</div>
</font><br>_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
<br></blockquote></div><br>