Neal Becker wrote:

> I need a function that is the inverse of PyArray_ITER_GOTO1D.  A bit of
> guesswork brought me to this, can anyone please tell me if it looks
> correct?
> 
> inline npy_intp as_linear (PyArrayIterObject const* it) {
>   if (it->nd_m1 == 0)
>     return (it->dataptr - it->ao->data)/it->strides[0];
>   else if (it->contiguous)
>     return (it->dataptr - it->ao->data)/it->ao->descr->elsize;
>   else {
>     npy_intp loc = 0;
>     npy_intp offset = (it->dataptr - it->ao->data)/it->ao->descr->elsize;
>     for (int i = 0; i <= it->nd_m1; ++i) {
>       loc += offset / it->factors[i];
>       offset %= it->factors[i];
>     }
>     return loc;
>   }
> }

That didn't work for negative strides.  Actually, I think all I need is this:

inline npy_intp as_linear (PyArrayIterObject const* it) {
  return it->index;
}

Is this correct?

_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to