Vered,

You should also check out PDL::Dims, which allows you to address slices
/ indices via names, not caring about their order. The nop, ncop, nagg
functions / methods are used for slicing, joins and aggregates,
respectively. Especially the ncop should make your life a lot easier
compared to which / where, I think.

Ingo

On 09/22/2014 01:28 PM, David Mertens wrote:
> Vered,
>
> You should also know that performing a "query" on a piddle is quite
> straight-forward with the "where" and "which" methods.
>
> $positive_data = $data->where($data > 0);
>
> The $positive_data piddle is a "slice" of the original data. This
> means you can manipulate the data in $positive_data and the
> modifications will "flow back" to the original piddle.
>
> David
>
> On Fri, Sep 19, 2014 at 3:30 PM, Craig DeForest
> <[email protected] <mailto:[email protected]>> wrote:
>
>
>     On Sep 18, 2014, at 3:31 PM, Vered Caspi <[email protected]
>     <mailto:[email protected]>> wrote:
>
>>     Hello,
>>     I am new to PDL, and I wonder whether it is possible to do
>>     SQL-like operations in PDL.
>>     For example, is it possible to join (merge) tables? To use inner
>>     join, left outer join etc?
>>     Is it possible to concatenate tables, like R's rbind and cbind?
>>     Thank you in advance,
>>                                              Vered
>>      
>
>     If by 'table' you mean '2-D structured array', then yes!  Although
>     it's not really optimized for that kind of work.  Sqlite and the
>     DBH/DBI modules (from CPAN) give direct SQL access.  Joining and
>     selection, in particular, are operations for which SQL databases
>     are optimized.  PDL's target space is large vector numeric
>     calculations, though of course you can use it for simple table
>     manipulation -- provided your tables have all-numeric contents.
>
>       # merge two tables (boneheaded way)
>       $c = $a->glue(1,$b);
>       # merge two tables (no dups)
>       $c = $a->glue(1,$b)->uniqvec;
>
>       # inner join -- a bit more awkward. Construct (2-D) outer
>     product mask showing in which rows of 
>       # A and B the key columns are equal, then find the coordinates
>     where it is true.  Finally, index 
>       # A and B to get the joined rows from A and joined rows from B
>     in two separate variables
>       $acol = $a->(($colno_in_a));
>       $bcol = $b->(($colno_in_b));  
>       $equality_outer = $acol == $bcol->(*1);
>       $dexes = $equality_outer->whichND;
>       $a_from_join = $a->(:,($dexes->((0)));
>       $b_from_join = $b->(:,($dexes->((1)));
>
>       # merge two tables with the same number of rows, concatenating
>     columns
>       $c = $a->glue(0,$b);
>
>       # merge two tables with the same number of columns,
>     concatenating rows
>       $c = $a->glue(1,$b);
>
>          
>
>
>     _______________________________________________
>     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
>
>
> _______________________________________________
> 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

Reply via email to