From: Charles R H. <cha...@gm...> - 2006-10-09 20:14:54
|
On 10/9/06, A. M. Archibald <per...@gm...> wrote: > > > > > > c contains arbitray floats. > > > > > essentially it is to compute class totals > > > > > as in total[class[i]] += value[i] > > > > This seems like a rather common operation - I know I've needed it on > > > at least two occasions - is it worth creating some sort of C > > > implementation? What is the appropriate generalization? > > > > Some sort of indirect addressing infrastructure. But it looks like this > > could be tricky to make safe, it would need to do bounds checking at the > > least and would probably work best with a contiguous array as the > target. I > > could see some sort of low-level function called argassign(target, > indirect > > index, source) that could be used to build more complicated things in > > python. > > If it were only assignment that was needed, fancy indexing could > already handle it. The problem is that this is something that can't > *quite* be done with the current fancy indexing infrastructure - every > time an index comes up we want to add the value to what's there, > rather than replacing it. I suppose histogram covers one major > application; in fact if histogram allowed weightings ("count this > point as -0.6") it would solve the OP's problem. Sure, just add functions arg_addassign, etc., which means dest[ind[i]] += src[i], just as arg_assign would mean dest[ind[i]] = src[i]. If you covered all the assign variants I think you could do most everything. Upper level python routines could deal with shaping and such while the lower level routines dealt with flat, contiguous arrays. Chuck |