PDL::Matrix
Matrix(x)      User Contributed Perl Documentation      Matrix(x)



NAME
       PDL::Matrix -- a derived matrix class that implements col-
       umn-major constructors and methods

VERSION
       This document refers to version PDL::Matrix 0.01 of
       PDL::Matrix

SYNOPSIS
         use PDL::Matrix;

         $m = mpdl [[1,2,3],[4,5,6]];
         $m = PDL::Matrix->pdl([[1,2,3],[4,5,6]]);
         $m = msequence(4,3);
         @dimsa = $a->mdims; # 'dims' is not overloaded

         $v = vpdl [0,1,2,3]
         $v = vzeroes(s);


DESCRIPTION
       Overview

       This package tries to help people who want to use PDL for
       2D matrix computation with lots of indexing involved . It
       provides a PDL subclass so one- and two-dimensional pid-
       dles that are used as vectors resp. matrices can be typed
       in using traditional matrix convention.

       The original pdl class refers to the first index as the
       first row, the second index as the first column of a
       matrix. Consider

         print $B = sequence(3,2)
         [
          [0 1 2]
          [3 4 5]
         ]

       which gives a 2x3 matrix in terms of the matrix conven-
       tion, but the constructor used (3,2). This might get more
       confusing when using slices like
       sequence(3,2)->slice("1:2,(0)") : with traditional matrix
       convention one would expect [2 4] instead of [1 2].

       This subclass PDL::Matrix overloads the constructors and
       indexing functions of pdls so that they are compatible
       with the usual matrix convention, where the first dimen-
       sion refers to the row of a matrix. So now, the above
       example would be written as

         print $B = PDL::Matrix->sequence(3,2) # or $B = msequence(3,2)
         [
          [0 1]
          [2 3]
          [4 5]
         ]

       Routines like eigenvalue or matrix inversion can be used
       without any changes.

       Furthermore one can construct and use vectors as n x 1
       matrices without mentioning the second index '1'.

       Implementation

       "PDL::Matrix" works by overloading a number of PDL con-
       structors and methods such that first and second args
       (corresponding to first and second dims of corresponding
       matrices) are effectively swapped.  It is not yet clear if
       PDL::Matrix achieves a consistent column major look-and-
       feel in this way.

FUNCTIONS
       mpdl, PDL::Matrix::pdl

       constructs an object of class PDL::Matrix which is a pid-
       dle child class, where the first index refers to the first
       column of the two-dimensional piddle.

           $m = mpdl [[1,2,3],[4,5,6]];
           $m = PDL::Matrix->pdl([[1,2,3],[4,5,6]]);


       mzeroes, mones, msequence

       constructs a PDL::Matrix object similar to the piddle con-
       structors zeroes, ones, sequence

       vpdl

       constructs an object of class PDL::Matrix which is of
       matrix dimensions (n x 1)

           print $v = vpdl [0,1];
           [
            [0]
            [1]
           ]


       vzeroes, vones, vsequence

       constructs a PDL::Matrix object with matrix dimensions (n
       x 1), therefore only the first scalar argument is used.

           print $v = vsequence(e);
           [
            [0]
            [1]
           ]


       PDL::Matrix::slice, PDL::Matrix::dice

       same as slice, dice for normal piddles, but reflecting the
       matrix convention by swapping the first two arguments.

           print  sequence(3,2)->slice("1:2,(0)") # piddle
           [1 2]
           print msequence(3,2)->slice("1:2,(0)") # PDL::Matrix
           [2 4]


       PDL::Matrix::at

       same as at for piddles, but reflecting the matrix conven-
       tion by swapping the first two arguments

       If only one scalar argument is used, we assume the object
       to be a vector and look only at the first column.

       PDL::Matrix::set

       set a particular value in a PDL::Matrix object. Note that
       this has to be called as an object method rather than a
       function

       print msequence(3,3)->set(2,0,-1) # ok with PDL::Matrix
       convention [
        [ 0  1  2]
        [ 3  4  5]
        [-1  7  8] ]

       print set msequence(3,3), 2,0,-1 # does not conform with
       PDL::Matrix convention [
        [ 0  1 -1]
        [ 3  4  5]
        [ 6  7  8] ]

       PDL::Matrix::reshape

       same as reshape for piddles, but reflecting the matrix
       convention by swapping the first two arguments

       mdims

       returns the dimensions of the PDL::Matrix object in matrix
       convention

       "dims" is NOT overloaded by PDL::Matrix to make sure that
       methods like PDL::transpose still work. So use "mdims" to
       get the dims in the PDL::Matrix notation.

           print msequence(3,2)->mdims
           3 2


       kroneckerproduct

       returns kroneckerproduct of two matrices. This is not
       efficiently implemented.

       det_general

       returns a generalized determinant of a matrix. If the
       matrix is not regular, one can specify the rank of the
       matrix and the corresponding subdeterminant is returned.
       This is implemented using the "eigens" function.

       trace

       returns the trace of a matrix (sum of diagonals)

       vcrossp, PDL::Matrix::crossp

       similar to PDL::crossp, however reflecting PDL::Matrix
       notations

BUGS AND PROBLEMS
       Because we change the way piddles are constructed, not all
       pdl operators may be applied to piddle-matrices. The inner
       product is not redefined. We might have missed some func-
       tions/methods. Internal consistency of our approach needs
       yet to be established.

TODO
       check all PDL functions, benchmarks, optimization, lots of
       other things ...

AUTHOR(R)
       Stephan Heuel (stephan@heuel.org), Christian Soeller
       (c.soeller@auckland.ac.nz).

COPYRIGHT
       All rights reserved. There is no warranty. You are allowed
       to redistribute this software / documentation under cer-
       tain conditions. For details, see the file COPYING in the
       PDL distribution. If this file is separated from the PDL
       distribution, the copyright notice should be included in
       the file.



perl v5.6.1                 2001-10-28                  Matrix(x)