Thanks. I just tried logging in to SourceForge to put this (and which)
on the Perl for Matlab page, but although I am logged in to SF, there is
no edit link on the project page. Is this something for which I need to
apply?
On 24/01/2013 17:43, David Mertens wrote:
I only briefly touched on "where". The "where" function is pretty
awesome compared with Matlab because you can actually save the "slice"
in a variable and manipulate it later. In Matlab, as I recall, you can
only manipulate a slice on the line in which the slice is created. In
PDL, you can store the slice in a variable and manipulate it later.
$a = sequence(20);
$b = $a->where($a % 2 == 0);
# Make all even values in $a odd:
$b += 1;
On Thu, Jan 24, 2013 at 10:40 AM, David Mertens
<[email protected] <mailto:[email protected]>> wrote:
Just to clarify, here's something out of the pdl shell:
# make 20 values from -9 to 10
pdl> $a = zeroes(20)->xlinvals(-9, 10)
pdl> p $a
[-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10]
# get a mask of true/false
pdl> p $a == 4
[0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]
# Get that offset:
pdl> p which($a == 4)
[13]
# Mask all values that are even:
pdl> p $a % 2 == 0
[0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1]
# Get those indices
pdl> p which($a % 2 == 0)
[1 3 5 7 9 11 13 15 17 19]
# Flip the sign of even values
pdl> $a->where($a % 2 == 0) *= -1
pdl> p $a
[-9 8 -7 6 -5 4 -3 2 -1 0 1 -2 3 -4 5 -6 7 -8 9 -10]
# learn about approx:
pdl> ? approx
# use it for floating point numbers
pdl> $a = sequence(20)->sqrt
pdl> p $a
[0 1 1.4142136 1.7320508 2 2.236068 2.4494897 2.6457513
2.8284271 3 3.1622777 3.3166248 3.4641016 3.6055513 3.7416574
3.8729833 4 4.1231056 4.2426407 4.3588989]
# Find the square root of 2, approximately:
pdl> p $a->approx(1.414)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
# The default epsilon, 1e-6, is too strict.
# Find where $a is approximately 1.414, within 1e-3
pdl> p $a->approx(1.414, 1e-3)
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
# Later calls to approx use same "epsilon" that we just set:
pdl> p $a->approx(1.414)
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
# Get the index thereof
pdl> p which($a->approx(1.414))
[2]
Hope that helps!
On Thu, Jan 24, 2013 at 10:23 AM, Lee Goddard <[email protected]
<mailto:[email protected]>> wrote:
Thanks.
On 24/01/2013 15:50, Chris Marshall wrote:
which or whichND
On Thu, Jan 24, 2013 at 9:46 AM, Lee Goddard
<[email protected] <mailto:[email protected]>> wrote:
Is there a PDL equivalant to MATLAB's 'find(x)'
function, or will I need to
write my own?
TIA
Lee
ind = find(X)
locates all nonzero elements of array X, and returns
the linear indicies of
those elements in vector ind. If X is a row vector,
then ind is a row
vector; otherwise, ind is a column vector. If X
contains no nonzero elements
or is an empty array, then ind is an empty array.
-- http://www.mathworks.com/help/matlab/ref/find.html
_______________________________________________
Perldl mailing list
[email protected] <mailto:[email protected]>
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
_______________________________________________
Perldl mailing list
[email protected] <mailto:[email protected]>
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
--
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it." -- Brian Kernighan
--
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it." -- Brian Kernighan
_______________________________________________
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