PDL::Course (1)
Leading comments
Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) Standard preamble: ========================================================================
NAME
PDL::Course - A journey through PDL's documentation, from beginner to advanced.AUTHOR, DATE
This is written by David Mertens with edits by Daniel Carrera.Preface
This document is an attempt to pull all the key
I've broken down everything by level of expertise, and within expertise I've covered documentation, library, and workflow modules. The documentation modules are useful for what they tell you; the library modules are useful for the functions that they define for you; the workflow modules are useful for the way that they allow you to get your work done in new and different ways.
Introductory
If you are new toDocumentation
Modules that tell you how to start usingAfter the first three, most of the docs listed below are rather dry. Perhaps they would be better summarized by tables or better synopses. You should at least scan through them to familiarize yourself with the basic capabilities of
- *
-
PDL::Philosophy, PDL::QuickStart
A couple of brief introductions to
PDL.The second one is a bit more hands-on. If you are new toPDL,you should start with these. - *
-
PDL::Basic
Covers basic piddle-creation routines like "sequence", "rvals", and "logxvals" to name a random few. Also covers "hist" and "transpose".
- *
-
PDL::Ufunc
Explains a large collection of built-in functions which, given an N-dimension piddle, will create a piddle with N-1 dimensions.
- *
-
PDL::NiceSlice
PDLcame of age right around the turn of the millennium and NiceSlice came on the scene slightly after that. Some of the docs still haven't caught up. NiceSlice is the 'modern' way to slice and dice your piddles. Read the Synopsis, then scroll down to The New Slicing Syntax. After you've read to the bottom, return to and read the stuff at the top.
- *
-
PDL::Primitive
Defines a whole slew of useful built-in functions. These are the sorts of things that beginners are likely to write to the list and say, ``How do I do xxx?'' You would be well on your way to learning the ropes after you've gotten through this document.
- *
-
Selections from PDL::Core
Like PDL::Primitive, defines a large set of useful functions. Unfortunately, some of the functions are quite esoteric, but are mixed in with the rest of the simple and easy ones. Skim the whole document, skipping over the complicated functions for now. I would point out in particular the function "approx".
Workflow
- *
-
The perldl or pdl2 Shell
The Perldl Shell is a
REPL(Read-Evaluate-Print-Loop, in other words, a prompt or shell) that allows you to work withPDL(or any Perl, for that matter) in 'real time', loading data from files, plotting, manipulating... Anything you can do in a script, you can do in thePDLShell, with instant feedback!
Libraries
- *
-
PDL
The main workhorse module. You'll include this in nearly every
PDLprogram you write.
Normal Usage
The sorts of modules that you'll likely use on a normal basis in scripts or from within the perldl shell. Some of these modules you may never use, but you should still be aware that they exist, just in case you need their functionality.Documentation
- *
-
PDL::Slices
In addition to explaining the original slicing and dicing functions - for which you can usually use PDL::NiceSlice - this also covers many dimension-handling functions such as "mv", "xchg", and "reorder". This also thoroughly documents the "range" function, which can be very powerful, and covers a number of internal functions, which can probably be skipped.
- *
-
PDL::Indexing
This covers a lot of the deeper conceptual ground that you'll need to grasp to really use
PDLto its full potential. It gets more complex as you go along, so don't be troubled if you find yourself loosing interest half way through. However, reading this document all the way through will bring you much closer toPDLenlightenment. - *
-
PDL::IOPDLhas quite a fewIOmodules, most of which are discussed in this summary module.
- *
-
PDL::Tips
A collection of some of Tuomas's ideas for making good use of
PDL. - *
-
PDL::BadValues
Explains what bad values are and how and why they are implemented.
- *
-
Selections from Inline::Pdlpp
Although writing
PDL::PPcode is considered an Advanced topic, and is covered in the next section, you should be aware that it is possible (and surprisingly simple) to write PDL-aware code. You needn't read the whole thing at this point, but to get some feel for how it works, you should read everything up through the first example. A copy of this documentation is contained in PDL::PP-Inline. - *
-
PDL::Objects
Explains how to subclass a piddle object.
- *
-
PDL::Index
This was discussed in the Preface. It is an automatically generated file that lists all of the
PDLmodules on your computer. There are many modules that may be on your machine but which are not documented here, such as bindings to theFFTWlibrary, orGSL.Give it a read!
Libraries
- *
-
PDL::Complex
Complex number support. No,
PDLdoes not have complex number support built into the core, but this should help you out. - *
-
PDL::FFTPDL's own Fast Fourier Transform. If you haveFFTW,then you should probably make use of it; this isPDL's internal implementation and should always be available.
- *
-
GSLPDLdoes not have bindings for every sub-library in theGNUScientific Library, but it has quite a few. If you haveGSLinstalled on your machine then chances are decent that yourPDLhas theGSLbindings. For a full list of theGSLbindings, check PDL::Index.
- *
-
PDL::Func
A somewhat uniform interface to the different interpolation modules in
PDL. - *
-
PDL::Bad
Includes some basic bad-value functionality, including functions to query if a piddle has bad values ("isbad") and functions to set certain elements as bad ("setbadat" and "setbadif"). Among other places, bad values are used in PDL::Graphics::PLplot's xyplot to make a gap in a line plot.
- *
-
PDL::DiskCache
A cool module that allows you to tie a Perl array to a collection of files on your disk, which will be loaded into and out of memory as piddles. If you find yourself writing scripts to process many data files, especially if that data processing is not necessarily in sequential order, you should consider using PDL::DiskCache.
- *
-
PDL::Char
A
PDLsubclass that allows you to store and manipulate collections of fixed-length character strings usingPDL. - *
-
PDL::Image2D
A whole collection of methods for manipulating images whose image data are stored in a piddle. These include methods for convolutions (smoothing), polygon fills, scaling, rotation, and warping, among others.
- *
-
PDL::ImageND
Contains a few functions that are conceptually related to image processing, but which can be defined for higher-dimensional data. For examples this module defines high-dimensional convolution and interpolation, among others.
- *
-
PDL::ImageRGB
Defines some useful functions for working with
RBGimage data. It's not very feature-full, but it may have something you need, and if not, you can always add more! - *
-
PDL::Transform
Creates the transform class, which allows you to create various coordinate transforms. For example, if you data is a collection of Cartesian coordinates, you could create a transform object to convert them to Spherical-Polar coordinates (although many such standard coordinate transformations are predefined for you, in this case it's called "t_spherical").
- *
-
PDL::Opt::Simplex
This package states that it ``implements the commonly used simplex optimization algorithm.'' I'm going to assume that if you need this algorithm then you already know what it is.
- *
-
PDL::Math
A collection of fairly standard math functions, like the inverse trigonometric functions, hyperbolic functions and their inverses, and others. This module is included in the standard call to "use PDL", but not in the Lite versions.
- *
-
PDL::Matrix
Provides a few functions that use the standard mathematical Matrix notation of row-column indexing rather than the PDL-standard column-row. It appears that this module has not been heavily tested with other modules, so although it should work with other modules, don't be surprised if something breaks when you use it (and feel free to offer any fixes that you may develop).
- *
-
PDL::MatrixOps
Provides many standard matrix operations for piddles, such as computing eigenvalues, inverting square matrices, LU-decomposition, and solving a system of linear equations. Though it is not built on PDL::Matrix, it should generally work with that module. Also, the methods provided by this module do not depend on external libraries such as Slatec or
GSL. - *
-
PDL::Reduce
Implements an interface to all the functions that return piddles with one less dimension (for example, "sumover"), such that they can be called by suppling their name, as a string.
Workflow
- *
-
PDL::AutoLoader
Enables Matlab-style autoloading. When you call an unknown function, instead of complaining and croaking,
PDLwill go hunt around in the directories you specify in search of a like-named file. Particularly useful when used with the Perldl Shell. - *
-
PDL::Dbg
Declares the "px" function, which can be handy for debugging your
PDLscripts and/or perldl shell commands. - *
-
PDL::Options
Suppose you define a powerful, versatile function. Chances are good that you'll accept the arguments in the form of a hash or hashref. Now you face the problem of processing that hashref. PDL::Options assists you in writing code to process those options. (You'd think Perl would have tons of these sorts of modules lying around, but I couldn't find any.) Note this module does not depend on
PDLfor its usage or installation. - *
-
PDL::pdldoc
Ever fired-up the perldl shell just to look up the help for a particular function? You can use "pdldoc" instead. This shell script extracts information from the help index without needing to start the perldl shell.
Advanced Usage
The sorts of modules and documentation that you'll use if you write modules that use- *
-
PDL::Lite, PDL::LiteF
Lite-weight replacements for "use PDL", from the standpoint of namespace pollution and load time.
- *
-
Inline::Pdlpp
This was mentioned earlier. Before you begin reading about
PDL::PP(next), you should remind yourself about how to use this. Inline::Pdlpp will help you experiment withPDL::PPwithout having to go through the trouble of building a module and constructing makefiles (but see PDL::pptemplate for help on that). - *
-
PDL::PP
The
PDLPre-Processor, which vastly simplifies making you C or Fortran code play with Perl and piddles. Most ofPDL's basic functionality is written usingPDL::PP,so if you're thinking about how you might integrate some numerical library written in C, look no further. - *
-
PDL::pptemplate
A script that automates the creation of modules that use
PDL::PP, which should make your life as a module author a bit simpler. - *
-
PDL::CallExt
Allows you to call functions using external shared libraries. This is an alternative to using
PDL::PP. The major difference betweenPDL::PPand PDL::CallExt is that the former will handle threading over implicit thread dimensions for you, whereas PDL::CallExt simply calls an external function.PDL::PPis generally the recommended way to interface your code withPDL,but it wouldn't be Perl if there wasn't another way to do it. - *
-
PDL::Config
Defines the %PDL::Config hash, which has lots of useful information pertinent to your
PDLbuild. - *
-
PDL::Doc
Explanation of the
PDLdocumentation conventions, and an interface to thePDLDocumentation parser. Following these guidelines when writing documentation forPDLfunctions will ensure that your wonderful documentation is accessible from the perldl shell and from calls to "barf". (Did you notice that "barf" used your documentation? Time to reread PDL::Core...) - *
-
PDL::Exporter
A simple replacement for the standard Exporter module. The only major difference is that the default imported modules are those marked ':Func'.
- *
-
PDL::Types
Defines some useful functions for getting a piddle's type, as well as getting information about that type.
- *
-
PDL::Version
Simply defines the scalar $PDL::Version::Version with the current version of
PDL,as defined inPDL.pm. This is most useful if you distribute your own module onCPAN,use PDL::Lite or PDL::LiteF and want to make sure that your users have a recent-enough version ofPDL.Since the variable is defined inPDL.pm, you don't need this module if you "use PDL".
Expert Usage
- *
-
PDL::Core::Dev
Provides some decently useful functions that are pretty much only needed by the
PDLPorters. - *
-
PDL::API
Explains how to make a piddle by hand, from Perl or your C source code, using the
PDL API. - *
-
PDL::Internals
Explains the nitty-gritty of the
PDLdata structures. After reading this (a few times :), you should be able to create a piddle completely from scratch (i.e. without using thePDL API). Put a little differently, if you want to understand howPDL::PPworks, you'll need to read this.