I feel like I've seen some pp code that did this, but I don't remember where it was. I'll muck around and see what I can find. I think it can be done, but I'm not sure if you can do it with standard Perl or if we'll need to figure out some sort of PDL::PP trick for it.
David On Sat, May 1, 2010 at 7:17 PM, Matthew Kenworthy < [email protected]> wrote: > I've written a version of whereND that does 'the right thing' in > threading a mask over higher dimensions of an input piddle, and it > returns a sensible looking piddle back. > > The trouble is that the reshape() breaks the threading back to the > original piddle. Can any other pdlers suggest a way to return back a > piddle with dataflow all the way back to $i? > > Thanks, > > Matt > > sub whereND { > use strict; > my ($i, $w) = @_; > > # w is a mask 0 = false, 1 = true > # i is M dimensional > # w is N < M dimensional > # dims(i) 1..N == dims(i) 1..N > # thread over N+1 to M dimensions > > my $n = sum($w); > > my $sub_i = $w * ones($i); > > my $where_sub_i = $i->where($sub_i); > > # count the number of dims in w and i > # w = a b c d e f..... > my @idims = dims($i); > # ...and pop off the number of dims in w > foreach(dims($w)){shift(@idims)}; > > $where_sub_i->reshape($n, @idims); > return ($where_sub_i); > } > > > > -- > Matthew Kenworthy / Assistant Professor / Leiden Observatory > Niels Bohrweg 2 (#463) / P.O. Box 9513 / 2300 RA Leiden / NL > > _______________________________________________ > Perldl mailing list > [email protected] > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl >
_______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
