NAME

PDL - the Perl Data Language

SYNOPSIS

use PDL;
$x = zeroes 3,3; # 3x3 matrix
$y = $x + 0.1 * xvals($x) + 0.01 * yvals($x);
print $y;
print $y->slice(":,1");  # row 2
print $diag = $y->diagonal(0,1), "\n"; # 0 and 1 are the dimensions
$diag += 100;
print "AFTER, y=$y";
[
 [   0  0.1  0.2]
 [0.01 0.11 0.21]
 [0.02 0.12 0.22]
]
[
 [0.01 0.11 0.21]
]
[0 0.11 0.22]
AFTER, y=
[
 [   100    0.1    0.2]
 [  0.01 100.11   0.21]
 [  0.02   0.12 100.22]
]

DESCRIPTION

(For the exported PDL constructor, pdl(), see PDL::Core)

PDL is the Perl Data Language, a perl extension that is designed for scientific and bulk numeric data processing and display. It extends perl's syntax and includes fully vectorized, multidimensional array handling, plus several paths for device-independent graphics output.

PDL is fast, comparable and often outperforming IDL and MATLAB in real world applications. PDL allows large N-dimensional data sets such as large images, spectra, etc to be stored efficiently and manipulated quickly.

VECTORIZATION

For a description of the vectorization (also called "broadcasting"), see PDL::Core.

INTERACTIVE SHELL

The PDL package includes an interactive shell. You can learn about it, run perldoc perldl, or run the shell perldl or pdl2 and type help.

LOOKING FOR A FUNCTION?

If you want to search for a function name, you should use the PDL shell along with the "help" or "apropos" command (to do a fuzzy search). For example:

pdl> apropos xval
xlinvals        X axis values between endpoints (see xvals).
xlogvals        X axis values logarithmicly spaced...
xvals           Fills an ndarray with X index values...
yvals           Fills an ndarray with Y index values. See the CAVEAT for xvals.
zvals           Fills an ndarray with Z index values. See the CAVEAT for xvals.

To learn more about the PDL shell, see perldl or pdl2.

LANGUAGE DOCUMENTATION

Most PDL documentation describes the language features. The number of PDL pages is too great to list here. The following pages offer some guidance to help you find the documentation you need.

PDL::FAQ

Frequently asked questions about PDL. This page covers a lot of questions that do not fall neatly into any of the documentation categories.

PDL::Tutorials

A guide to PDL's tutorial-style documentation. With topics from beginner to advanced, these pages teach you various aspects of PDL step by step.

PDL::Modules

A guide to PDL's module reference. Modules are organized by level (foundation to advanced) and by category (graphics, numerical methods, etc) to help you find the module you need as quickly as possible.

PDL::Course

This page compiles PDL's tutorial and reference pages into a comprehensive course that takes you from a complete beginner level to expert.

PDL::Index

List of all available documentation, sorted alphabetically. If you cannot find what you are looking for, try here.

PDL::DeveloperGuide

A guide for people who want to contribute to PDL. Contributions are very welcome!

DATA TYPES

PDL comes with support for most native numeric data types available in C. 2.027 added support for C99 complex numbers. See PDL::Core, PDL::Ops and PDL::Math for details on usage and behaviour.

MODULES

PDL includes about a dozen perl modules that form the core of the language, plus additional modules that add further functionality. The perl module "PDL" loads all of the core modules automatically, making their functions available in the current perl namespace. Some notes:

Modules loaded by default
use PDL; # Is equivalent to the following:

  use PDL::Core;
  use PDL::Ops;
  use PDL::Primitive;
  use PDL::Ufunc;
  use PDL::Basic;
  use PDL::Slices;
  use PDL::Bad;
  use PDL::MatrixOps;
  use PDL::Math;
  use PDL::IO::Misc;
  use PDL::IO::FITS;
  use PDL::IO::Pic;
  use PDL::IO::Storable;
  use PDL::Lvalue;
PDL::Lite and PDL::LiteF

These are lighter-weight alternatives to the standard PDL module. Consider using these modules if startup time becomes an issue.

Note that PDL::Math and PDL::MatrixOps are not included in the PDL::Lite and PDL::LiteF start-up modules.

Exports

use PDL; exports a large number of routines into the calling namespace. If you want to avoid namespace pollution, you must instead use PDL::Lite, and include any additional modules explicitly.

PDL::NiceSlice

Note that the PDL::NiceSlice syntax is NOT automatically loaded by use PDL;. If you want to use the extended slicing syntax in a standalone script, you must also say use PDL::NiceSlice;.