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

Reply via email to