Hello Craig,
I cannot try your examples: do you use the same $x?
the error line says
index out-of-bounds in range at
Bruno.
Craig DeForest a écrit :
Hello, Bruno,
It is not quite clear what you are after. Range will preserve
the shape of the index variable, so if you use something other than
whichND to create it, you can make a 2-D result. You can also tell
range to pull out stacked subfields, one per index. These may be
helpful; in each case $out gets the same subfield as your example. The
first pulls a single 7-element subfield for each of two locations (and
transposes the 2x7 output to get your 7x2 result); the second uses a
dummy dimension to assemble a 2x7x2 index variable, then collapses it
by index into $x to get a 7x2 output.
$idx= pdl([4,0],[1,1]);
$out=$x->range($idx,[7,0])->xchg(0,1);
$idx= pdl([4,0],[1,1])->(:,*1) + yvals(7)*(xvals(2)==0);
$out = $idx->range($idx);
Hi all,
Is there a smarter way to extract a 2D subset of a 2D matrix than in
the following example?
The problem is that I have to know the number of lines and cols of the
subset for the reshape....
perldl> $x = sequence(10,2)
perldl> p $x
[
[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
]
perldl> $ind = whichND(($x>3) & ($x<18))
perldl> p $ind
[
[4 0]
[5 0]
[6 0]
[7 0]
[8 0]
[9 0]
[0 1]
[1 1]
[2 1]
[3 1]
[4 1]
[5 1]
[6 1]
[7 1]
]
perldl> $y = $x->range($ind)->reshape(7,2)
perldl> p $y
[
[ 4 5 6 7 8 9 10]
[11 12 13 14 15 16 17]
]
Cheers,
Bruno
--
____________________________________________________
Dr. Bruno Picard
CLS
Dir. Océanographie Spatiale, Dép. Traitement de la Mesure et Segment
Sol
Space Oceanography Division, Data Analysis and Ground Processing
Unit
8-10 rue Hermès, 31520 Ramonville Saint Agne, France
____________________________________________________
<mime-attachment.gif>
Cliquez
ici
si ce message est indésirable (pourriel).
--
____________________________________________________
Dr. Bruno Picard
CLS
Dir. Océanographie Spatiale, Dép. Traitement de la Mesure et Segment
Sol
Space Oceanography Division, Data Analysis and Ground Processing Unit
8-10 rue Hermès, 31520 Ramonville Saint Agne, France
____________________________________________________
|