<div class="gmail_quote">On Fri, Nov 4, 2011 at 4:29 PM, Pauli Virtanen <span dir="ltr">&lt;<a href="mailto:pav@iki.fi">pav@iki.fi</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
04.11.2011 23:29, Pauli Virtanen kirjoitti:<br>
[clip]<br>
<div class="im">&gt; As the definition concerns only what happens on assignment, it does not<br>
&gt; have problems with commutativity.<br>
<br>
</div>This is of course then not really true in a wider sense, as an example<br>
from &quot;T J&quot; shows:<br>
<br>
a = 1<br>
a += IGNORE(3)<br>
# -&gt; a := a + IGNORE(3)<br>
# -&gt; a := IGNORE(4)<br>
# -&gt; a == IGNORE(1)<br>
<br>
which is different from<br>
<br>
a = 1 + IGNORE(3)<br>
# -&gt; a == IGNORE(4)<br>
<br>
Damn, it seemed so good. Probably anything expect destructive assignment<br>
leads to problems like this with propagating special values.<br>
<div><div></div><div class="h5"><br>
<br></div></div></blockquote><div><br>Ok...with what I understand now, it seems like for almost all operations:<br><br>   MISSING :  PdS<br>   IGNORED : PdC  (this gives commutivity when unignoring data points)<br><br>When you want some sort of &quot;reduction&quot;, we want to change the behavior for IGNORED so that it skips the IGNORED values by default. Personally, I still believe that this non-consistent behavior warrants a new method name.  What I mean is:<br>
<br>&gt;&gt;&gt; x = np.array([1, IGNORED(2), 3])<br>&gt;&gt;&gt; y = x.sum()<br>&gt;&gt;&gt; z = x[0] + x[1] + x[2]<br><br>To say that y != z will only be a source of confusion. To remedy, we force people to be explicit, even if they&#39;ll need to be explicit 99% of the time:<br>
<br>&gt;&gt;&gt; q = x.sum(skipIGNORED=True)<br><br>Then we can have y == z  and y != q.  To make the 99% use case easier, we provide a new method which passings the keyword for us.<br><br>----<br><br>With PdS and PdC is seems rather clear to me why MISSING should be implemented as a bit pattern and IGNORED implemented using masks.  Setting implementation details aside and going back to Nathaniel&#39;s original &quot;biggest *un*resolved question&quot;, I am now convinced that these (IGNORED and MISSING) should be distinct API concepts and still yet distinct from NaN with floating point dtypes.  The NA implementation in NumPy does not seem to match either of these (IGNORED and MISSING) exactly.  One cannot, as far as I know, unignore an element marked as NA.<br>
<br><br><br></div></div>