[Numpy-discussion] masked ufuncs in C: on github

Charles R Harris charlesr.harris@gmail....
Fri May 15 22:06:31 CDT 2009

On Fri, May 15, 2009 at 7:48 PM, Eric Firing <efiring@hawaii.edu> wrote:

> http://www.mail-archive.com/numpy-discussion@scipy.org/msg17595.html
> Prompted by the thread above, I decided to see what it would take to
> implement ufuncs with masking in C.  I described the result here:
> http://www.mail-archive.com/numpy-discussion@scipy.org/msg17698.html
> Now I am starting a new thread. The present state of the work is now in
> github:  http://github.com/efiring/numpy-work/tree/cfastma
> I don't want to do any more until I have gotten some feedback from core
> developers.  (And I would be delighted if someone wants to help with
> this, or take it over.)

Here the if ... continue needs to follow the declaration:

        if (*mp1) continue;
        float in1 = *(float *)ip1;
        float in2 = *(float *)ip2;
        *(float *)op1 = f(in1, in2);

I think this would be better as

        if (!(*mp1)) {
            float in1 = *(float *)ip1;
            float in2 = *(float *)ip2;
            *(float *)op1 = f(in1, in2);

But since this is actually a ternary function, you could define new
functions, something like

double npy_add_m(double a, double b, double mask)
    if (!mask) {
        return a + b;
    else {
        return a;

And use the currently existing loops. Well, you would have to add one for
ternary functions.

Question, what about reduce? I don't think it is defined defined for ternary
functions. Apart from reduce, why not just add, you already have the mask to
tell you which results are invalid.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20090515/64250623/attachment.html 

More information about the Numpy-discussion mailing list