On Wednesday 11 Nov 2009 10:07:00 Gabor Szabo wrote: > I am still not sure where *I* might need to use PDL but it > is still fun to play with it. It has a command line utility in > which I can play with it interactively. >
Naturally, as students of Electrical Engineering my fellow students and I found Matlab to be an indispensable tool, and I've also studied PDL to see what was Perl's answer to Matlab. People in other technical departments in the Technion told me that they also worked extensively with Matlab, which is kinda like the Perl of engineering. Many people I talked with told me they did Matlab the wrong way, by using many nested loops, and not using the built-in tensor operations which I knew better than to fall into. Of course, I once tried to do something the right Matlaby way by implementing a fourier transform using large matrix operations and it overflowed the workstation's memory (it was 64 MB or 128 MB or so, which was a lot back then), so I ended up unrolling a dimension into a loop. I also met a student who was purposely oblivious to learning C and decided to learn only Matlab. In any case, I did make use of PDL for implementing an alogrithm I devised for implementing a certain optimisation task with Freecell Solver (yes, I hear the grogers): http://www.shlomifish.org/lecture/Freecell-Solver/The-Next-Pres/slides/multi- tasking/ (short URL - http://xrl.us/bf4fis ). I later on extended it to support optimisation based on the number of moves in the solution: http://tech.groups.yahoo.com/group/fc-solve-discuss/message/980 Maybe I could have done the same using Firebird or PostgreSQL and with some SQL hackery, but I was more comfortable thinking in the PDL/Matlab mind-set. Now for your snippet: > Let's see an example: > > perldl> $x = pdl(1,2,3,4) > > perldl> p $x > [1 2 3 4] > > perldl> p $x + 1 # add one to each value > [2 3 4 5] > > perldl> p $x + $x # add the values pair wise > [2 4 6 8] > perldl> p $x * $x # multiply the values pair wise > [1 4 9 16] > > perldl> p transpose $x # from horizontal vector make a vertical vector > > [ > [1] > [2] > [3] > [4] > ] > Yes, indeed - the dimensions in PDL are very important and can be a source of no end of confusion. Also see << $x->xchg($dim_one, $dim_two) >> and other functions. Here is my attempt to concatenate tensors: <<<<<<<<<<shlomi:$trunk/fc-solve/source$ perldl perlDL shell v1.352 PDL comes with ABSOLUTELY NO WARRANTY. For details, see the file 'COPYING' in the PDL distribution. This is free software and you are welcome to redistribute it under certain conditions, see the same file for details. ReadLines, NiceSlice, MultiLines enabled Reading PDL/default.perldlrc... Found docs database /usr/lib/perl5/vendor_perl/5.10.1/i386-linux-thread- multi/PDL/pdldoc.db Type 'help' for online help Type 'demo' for online demos Loaded PDL v2.4.5 (supports bad values) Note: AutoLoader not enabled ('use PDL::AutoLoader' recommended) perldl> $x = pdl([1,2,3,4]) perldl> $y = pdl([5,606,7000,88]) perldl> $x perldl> p $x [1 2 3 4] perldl> p $y [5 606 7000 88] perldl> p ($x . $y) [1 2 3 4][5 606 7000 88] perldl> p ($x m $y) Search pattern not terminated perldl> p ($x , $y) [1 2 3 4] [5 606 7000 88] perldl> p cat($x,$y) [ [ 1 2 3 4] [ 5 606 7000 88] ] perldl> $x = pdl([1,2,3,4]) perldl> $y = pdl([5,606,7000,88]) perldl> p cat($x,$y) [ [ 1 2 3 4] [ 5 606 7000 88] ] perldl> p transpose(cat(transpose($x),transpose($y))) [ [ [1 2 3 4] ] [ [ 5 606 7000 88] ] ] perldl> p transpose($x) [ [1] [2] [3] [4] ] perldl> p transpose($y) [ [ 5] [ 606] [7000] [ 88] ] perldl> p cat(transpose($x),transpose($y)) [ [ [1] [2] [3] [4] ] [ [ 5] [ 606] [7000] [ 88] ] ] perldl> p [$x,$y] ARRAY(0x8f4f538) perldl> p pdl([$x,$y]) [ [ 1 2 3 4] [ 5 606 7000 88] ] perldl> >>>>>>>>>>>>>>>>> As you can see I was not able to form [1,2,3,4,5,606,etc.]. Any insights would be appreciated. Regards, Shlomi Fish -- ----------------------------------------------------------------- Shlomi Fish http://www.shlomifish.org/ The Case for File Swapping - http://shlom.in/file-swap Chuck Norris read the entire English Wikipedia in 24 hours. Twice. _______________________________________________ Perl mailing list Perl@perl.org.il http://mail.perl.org.il/mailman/listinfo/perl