[Numpy-discussion] MapIter api
Sebastian Berg
sebastian at sipsolutions.net
Tue Apr 23 18:06:20 EDT 2013
On Tue, 2013-04-23 at 17:08 -0400, Frédéric Bastien wrote:
> Hi,
>
> this is currently used in Theano! In fact, it is a John S. that
> implemented it in NumPy to allow fast gradient of the advanced
> indexing in Theano. It allow code like:
>
>
> matrix1[vector1, vector2] += matrix2
>
Yes, I had missed that and thought maybe nobody actually used it yet. I
gave some points why I think there should be some changes in the
original pull request [1]. Mostly I think it would make sense (also a
lot for theano) to rewrite it with the new iterators and expose the
subspace more directly. That would give vast speedups for mixed
fancy/non-fancy indices.
But if this is useful to you, I guess one can also just create a new one
if someone finds time, leaving the old MapIter deprecated and
unmaintained.
[1] https://github.com/numpy/numpy/pull/377
> where there is duplicate indices in the vector
>
> In looking at the code, I saw it use at least those part of the
> interface.
>
> PyArrayMapIterObject
> PyArray_MapIterNext
> PyArray_ITER_NEXT
> PyArray_MapIterSwapAxes
> PyArray_BroadcastToShape
>
There is likely no reason for changing these, but improving MapIter
would likely break binary compatibility because of struct access.
- Sebastian
>
> I lost the end of this discussion, but I think this is not possible in
> NumPy as there was not an agreement to include that. But I remember a
> few other user on this list asking for this(and they where Theano user
> to my knowledge).
>
>
> So I would prefer that you don't remove the part that we use for the
> next 1.8 release.
>
> thanks
>
> Frédéric
>
>
>
> On Tue, Apr 16, 2013 at 9:54 AM, Nathaniel Smith <njs at pobox.com>
> wrote:
> On Mon, Apr 15, 2013 at 5:29 PM, Sebastian Berg
> <sebastian at sipsolutions.net> wrote:
> > Hey,
> >
> > the MapIter API has only been made public in master right?
> So it is no
> > problem at all to change at least the mapiter struct, right?
> >
> > I got annoyed at all those special cases that make things
> difficult to
> > get an idea where to put i.e. to fix the boolean array-like
> stuff. So
> > actually started rewriting it (and I already got one big
> function that
> > does all index preparation -- ok it is untested but its
> basically
> > there).
> >
> > I would guess it is not really a big problem even if it was
> public for
> > longer, since you shouldn't do those direct struct access
> probably? But
> > just checking.
>
>
> Why don't we just make the struct opaque, i.e., just declare
> it in the
> public header file and move the actual definition to an
> internal
> header file?
>
> If it's too annoying I guess we could even make it non-public,
> at
> least in 1.8 -- IIRC it's only there so we can use it in
> umath, and
> IIRC the patch to use it hasn't landed yet. Or we could just
> merge
> umath and multiarray into a single .so, that would save a
> *lot* of
> annoying fiddling with the public API that doesn't actually
> serve any
> purpose.
>
> -n
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
More information about the NumPy-Discussion
mailing list