Lists, Tables, and Matrices

Often, we would like to do more than just store individual values, particularly when we start wanting to analyze experimental data. As such, we would like a way to analyze datasets all at once (finding the mean, standard deviation, etc.), and may want to do even more. We’ll now take a look at some of the ways we can do this in Mathematica.

Lists

Lists are a convenient way of storing linear data. For example, we might want to store the results of several runs of an experiment (in Modern Lab, maybe the Gamma-Gamma experiment with total number of photons captured in a given time interval). We can do this fairly simply:

data={21, 24, 25, 32, 31, 22, 18}

To access the elements of data, we apply the indexing operator:

data[[1]]
data[[1;;2]]
data[[2;;4]]
data[[{1,3,5}]]

prints

21
{21, 24}
{24, 25, 32}
{21, 25, 31}

We can perform operations on lists as well, many of which can be extremely powerful:

{1, 2, 3, 4, 5}^2
Length[{4}] (*Length of list*)
Total[{1,2,3,4,5}] (*Sum of all elements*)
Mean[{0,1,2}] (*Arithmetic average of list*)
Norm[{1,1,1,1}] (*The norm of the list - think the norm of a vector*)
Dot[{0,1},{1,0}] (*Dot product of the given vectors*)
Union[{1,2,3},{3,4,5}] (*Union of the two sets*)
{0, 2, 4} + {4, 2, 0} (*Vector addition*)

prints

{1, 4, 9, 16, 25}
1
15
1
2
0
{1, 2, 3, 4, 5}
{4, 4, 4}

The above examples show some useful functions on lists. Applying a simple arithmetic operators on scalars applies the operation to each element and returns that list. Many desired functions often exist within Mathematica without having to re-create them by hand: Length is just the number of elements in the list, Mean is the arithmetic average of the elements, Norm is the mathematical norm \(||list||\), Dot takes the the dot (inner) product of the two lists, and Union treats the lists as sets and takes the union. Many other useful functions exist (many can be found here). The last example above shows that the addition operator for lists can also be applied to add each \(i^\textrm{th}\) element and return the resultant list.

Tables

Tables are just lists created by the Table command which is easy to use and effective for producing sequences:

Table[i,{i,1,10}]
Table[i^2,{i,5}]
Table[i, {i, {3, 2, 4}}]
list = {2, 3, 4};
Table[list[[i]]^2, {i, Length[list]}]
Table[{i, list[[i]]^2}, {i, Length[list]}]

is

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{1, 4, 9, 16, 25}
{3, 2, 4}
{4, 9, 16}
{{1, 4}, {2, 9}, {3, 16}}

Essentially, Table accepts some function over the domain given and will then create the list of the elements in the sequence over the given elements in the domain. The second example shows that given {i, N}, the domain is \(i\in[1, N]\). The third example shows that the elements to use can be given explicitly as well. The last examples combine what we learned about lists above to show how easily different concepts and structures in Mathematica can be combined.

Matrices

Just as tables are actually just lists, lists are in fact matrices:

{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

is the matrix \(\left(\begin{array}{ccc} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{array}\right)\) in the same way that

{{1, 2, 3}}

is the row vector \(\left(\begin{array}{ccc}1 & 2 & 3\end{array}\right)\) and

{{1}, {2}, {3}}

is the column vector \(\left(\begin{array}{c}1\\2\\3\end{array}\right)\).

We can take selections of the data with indices as normal

mat = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
mat[[{1, 3}, 2;;3]]

gives

{{2, 3}, {8, 9}}

But we can also do transformations with All which selects all the possible values:

mat[[1, All]]

gives

{1, 2, 3}

We have many operations on matrices at our disposal too. For example:

m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Transpose[m]
Det[m]
m . m
MatrixPower[m, 2]
Eigenvalues[m]

is

{{1, 4, 7}, {2, 5, 8}, {3, 6, 9}}
0
{{30, 36, 42}, {66, 81, 96}, {102, 126, 150}}
{{30, 36, 42}, {66, 81, 96}, {102, 126, 150}}
{3/2 (5 + Sqrt[33]), 3/2 (5 - Sqrt[33]), 0}

where Transpose[m] computes the matrix transpose \(m^\intercal\) (ConjugateTranspose[m] takes the transpose then converts each value to its complex conjugate, giving \(m^\dagger\)), Det[m] computes the determinant \(|m|\), m . m computes the matrix product (generally, when \(A\) has dimensions \(m\times{n}\), \(B\) has dimensions \(n\times{p}\), this gives \(AB=A\times{B}\) which has dimensions \(m\times{p}\), such that \((AB)_{i,j}=\sum_{k=1}^{n}A_{i,k}B_{k,j}\)), MatrixPower[m, n] computes \(m^n=m\times m\times m\times \ldots \times m\), and EigenValues[m] gives the eigenvalues of the matrix \(m\).

Eigenvalues

If you keep hearing the term “eigenvalues” or “eigenvectors” around the physics department but aren’t sure what they are, there’s a quick tutorial in the appendix about it. You might need to brush up on matrices a little beforehand. The tutorial can be found here.