thanks I will experiment with what you are saying tomorrow...too late ;) I may have misled with the example the dice part.. what I want to achieve is from every one of the 3 layers I want to pick random lines/rows and sumover them.. (by random I mean they are not sequential like row 1,2,3 ... but could be 1,4 or 1,2,5 )
sorry for the long example but here goes, let say I have : [ [ [1 1 1 1 1] [2 1 1 1 1] [3 1 1 1 1] [4 1 1 1 1] [5 1 1 1 1] ] [ [1 2 2 2 2] [2 2 2 2 2] [3 2 2 2 2] [4 2 2 2 2] [5 2 2 2 2] ] [ [1 3 3 3 3] [2 3 3 3 3] [3 3 3 3 3] [4 3 3 3 3] [5 3 3 3 3] ] ] I want to get back let say ( and sum over them): [ [ [1 1 1 1 1] [3 1 1 1 1] ] [ [2 2 2 2 2] [4 2 2 2 2] ] [ [1 3 3 3 3] [3 3 3 3 3] [4 3 3 3 3] [5 3 3 3 3] ] ] thanks again... On Thu, Sep 19, 2013 at 1:51 AM, Craig DeForest <[email protected]>wrote: > I'm not sure exactly what you're asking here. > > Dicing your 3D PDL will select a collection of planes out of the PDL and > stack them along the same direction you're selecting in, extracting > hyperplanes. It looks like your $p1, $p2, and $p3 are, respectively, > 5x2x1, 5x1x1, and 5x2x1. I think you're asking if you can get all those > loci as a 5x5x1 PDL in one go. > > If that's the case, you're looking for range(). > > Try this: > > $corners = pdl( [ > [0,2,0], # $p1 > [0,3,0], # $p1 > [0,4,1], # $p2 > [0,1,2], # $p3 > [0,5,2] # $p3 > ]); > $foo = $z->range($corners, [5,0,1])->mv(0,1); > The $corners gives coordinates of the corners of the planes you want to > extract. The second list ref (or PDL) in the range() call is the shape of > each plane. The middle size is set to 0 to drop that dim, so each range > will be a 5x1 plane. You get five ranges, and the 0 dim runs across the > ranges, so the output of range() will be a 5x5x1, running across > (selected-region, source-dim-0, source-dim-2). Since the selected regions > take the place of the dicing in dim 1, I put a "mv(0,1)" there to make the > final output run across (source-dim-0, selected-region, source-dim-2) like > you probably wanted. > > > > On Sep 18, 2013, at 10:20 PM, mraptor <[email protected]> wrote: > > > hi, > > I have a nD pdl (in this case 3D), something like this : > > > > $z = zeros(5,5,3) > > $z(,,0) .= ones(5,5) > > $z(,,1) .= ones(5,5)+1 > > $z(,,2) .= ones(5,5)+2 > > > > $p1 = $z(,pdl(2,3),0) > > $p2 = $z(,pdl(4),1) > > $p3 = $z(,pdl(1,5),2) > > > > I remember I read somewhere I can extract all those elements in one go, > but forgot what was it and how to use it... I want to do something along > the lines : > > > > $sum = $z->dice( $p1,$p2,$p3)->transpose->sumover; > > my $idx = which($sum == 0); > > $sum->where($sum > 0) .= 1; > > .... etc... > > > > any idea... thanks > > _______________________________________________ > > 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
