Nice demo, David. I don't remember whether MatLab has a null-set feature, but it's worth demonstrating for PDL:
pdl> $a = zeroes(20)->xlinvals(-9,10); pdl> p which($a>100); Empty[0] In this case, the final result is a one-dimensional PDL whose first dimension has size 0. On Jan 24, 2013, at 9:40 AM, David Mertens <[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]> 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]> 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] > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > > > _______________________________________________ > Perldl mailing list > [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 > _______________________________________________ > 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
