CONTENTS xvi
has meani n g in the world of computer science.
Programming language
The book uses Python, not a programming language with built-in support for vectors and matri-
ces. This gives students the opportunity to build vectors and matrices out of the data structures
that Python does provide. Using their own implementations of vector and matrix provides trans-
parency. Python does provide complex numbers, sets, lists (sequences), and dictionaries (which
we use for representing functions). In addition, Python provides comprehensions, expressions
that create sets, lists, or dictionaries using a simple and powerful syntax that resembles the
mathematical notat i on for defining sets. Using this syntax, many of the procedures we write
require only a singl e line of code.
Students are not expected to k n ow Python at the beginning; the first two labs form an
introduction to Python, and the examples throughout the text reinforce the ideas.
Vector and Matrix representations
The traditional concrete representation for a vector is as a sequence of field elements. This book
uses that representation but also uses another, especially in Python programs: a vector as a
function mapping a finite set D to a field . Similarly, the traditional representation for a matrix
is as a two-dimensional array or grid of field elements. We use this representation but also use
another: a matrix as a funct i on from the Cartesian product R × C of two finite sets to a field.
These more ge ne ral representations allow the vectors and matrices to be more directly con-
nected to the ap pli c at ion . For example, it is traditional in information retrieval to represent a
document as a vector in which, for each word, the vector specifies the number of occurences of
the word in the document. In this book, we define such a vector as a function from the domain
D of English words to the set of real numbers. Another example: when representing, say, a
1024×768 black-and-white image as a vector, we define the vector as a function from the domain
D = {1,...,1024}×{1,..,768} to the real numbers. The funct i on specifies, for each pixel (i, j),
the i mage intensity of that pixel.
From the programmer’s perspective, i t is certainly more convenient to direct l y index vectors
by strings (in the case of words) or tuples (in t h e case of pixels). However, a more important
advantage is this: having to choose a domain D for vectors gets us thinking ab ou t the appl i cat i on
from t he vector perspective.
Another advantage is analogou s to that of type-checki ng in programs or unit-checki n g in
physical calculati ons . For an R ×C matrix A, the mat r i x- vector product Ax is only legal if x is
a C-vector; the matrix-matrix product AB is only legal if C is the set of row-labels of B.These
constraints further reinforce the meanings of the operations.
Finally, allowing arbitrary fin i te sets (not just sequences of consecutive integers) to label the
elements helps make it clear that the order of elements in a vector or matrix is not always (or
even often) significant.