How about this pdl> p $p
[ [1 0 3 0] [0 1 0 1] [1 3 1 3] [0 1 0 1] ] pdl> $p->where($p >= 3) .= -999 pdl> p $p [ [ 1 0 -999 0] [ 0 1 0 1] [ 1 -999 1 -999] [ 0 1 0 1] ] pdl> $p->badflag(1); pdl> $p = $p->setvaltobad(-999); pdl> p $p [ [ 1 0 BAD 0] [ 0 1 0 1] [ 1 BAD 1 BAD] [ 0 1 0 1] ] pdl> p $p->cov_table; [ [ 0.22222222 -0.22222222 BAD -0.22222222] [-0.22222222 0.25 0 0.25] [ BAD 0 0 0] [-0.22222222 0.25 0 0.25] ] On Fri, Dec 23, 2011 at 12:59 AM, zev <[email protected]> wrote: > Yes! that is what I am trying to do and yes those are the loops i am > trying to avoid. > > Just to prove that I am not begging for free labor here the loop I just > finished writing. It is in a perl script not the pdl shell. > > my $n_row = $piddle->slice('0,:')->nelem; > > for (my $i = 0; $i <= $n_row - 1; $i++){ > my $loc_a = $piddle->PDL::slice(":,$i"); > for (my $j = 0; $j <= $n_row -1; $j++){ > my $loc_b = $piddle->PDL::slice(":,$j"); > my ($sub_a, $sub_b) = where($loc_a, $loc_b, $loc_a < 3 & > $loc_b <3); > my $cov = $sub_a->cov($sub_b)->at; > $r_data{$i}{$j} = $cov; > } > } > > > On Thu, Dec 22, 2011 at 10:26 PM, Derek Lamb <[email protected]>wrote: > >> ugh, not really. (also make sure to cc the list on your replies). Too >> many $b's floating around, and no clue what $a is in your concept function. >> I think it is one of your slices there? How about this: >> >> pdl> use PDL::Stats >> pdl> p $input >> >> [ >> [1 0 3 0] >> [0 1 0 1] >> [1 3 1 3] >> [0 1 0 1] >> ] >> >> pdl> for $i(0..$input->dim(1)-1){ >> $y = $input(:,($i)); >> for $j(0..$input->dim(1)-1){ >> $z = $input(:,($j)); >> ($a,$b) = where($y,$z,($y<3) & ($z<3)); >> $c = cov($a,$b); >> print "$i, $j: $c\n"; >> } >> } >> 0, 0: 0.222222222222222 >> 0, 1: -0.222222222222222 >> 0, 2: 0 >> 0, 3: -0.222222222222222 >> 1, 0: -0.222222222222222 >> 1, 1: 0.25 >> 1, 2: 0 >> 1, 3: 0.25 >> 2, 0: 0 >> 2, 1: 0 >> 2, 2: 0 >> 2, 3: 0 >> 3, 0: -0.222222222222222 >> 3, 1: 0.25 >> 3, 2: 0 >> 3, 3: 0.25 >> >> Is that what you are trying to get, but without the two for loops? >> >> Derek >> >> >> On Dec 22, 2011, at 11:34 AM, zev wrote: >> >> http://stackoverflow.com/questions/8595244/pdl-pairwise-row-comparison >> >> On Thu, Dec 22, 2011 at 11:30 AM, zev <[email protected]> wrote: >> >>> Thank you for your help. >>> >>> >>> Here is some sudo code that will (hopeful) illustrate my point better. >>> >>> p $b >>> >>> [ >>> [1 0 3 0] >>> [0 1 0 1] >>> [1 3 1 3] <- example piddle y >>> [0 1 0 1] <- example piddle z >>> ] >>> >>> my concept function{ >>> >>> >>> slice $b (grab row z) - works fine >>> slice $b (grab row y) - works fine >>> >>> >>> ($a, $b) = where($a,$b, $a < 3 && $b < 3 ) - works fine >>> >>> p $a [1 1] >>> p $b [0 0] >>> >>> cov($a $b) - works just fine. >>> >>> } >>> >>> I just need a way to execute pairwise across all rows. I will need to >>> do factorial(n rows) comparisons. >>> >> >> >> >> -- >> Zev Kronenberg >> Graduate Student >> University of Utah >> phone: 208-629-6224 >> >> >> > > > -- > Zev Kronenberg > Graduate Student > University of Utah > phone: 208-629-6224 > > > _______________________________________________ > 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
