## 3.7.12 Sparse Arrays

Many large-scale applications of linear algebra involve matrices that have many elements, but comparatively few that are non-zero. You can represent such sparse matrices efficiently in Mathematica using SparseArray objects, as discussed in Section 2.4.5. SparseArray objects work by having lists of rules that specify where non-zero values appear.

 SparseArray[list] a SparseArray version of an ordinary list SparseArray[{{, } -> , {, } -> , ... }, {m, n}] an sparse array with element {, } having value SparseArray[{{, }, {, }, ... } -> {, , ... }, {m, n}] the same sparse array Normal[array] the ordinary list corresponding to a SparseArray

Specifying sparse arrays.

As discussed in Section 2.4.5, you can use patterns to specify collections of elements in sparse arrays. You can also have sparse arrays that correspond to tensors of any rank.

This makes a sparse numerical matrix, with 148 non-zero elements.
 In[1]:=  m = SparseArray[{{30, _} -> 11.5, {_, 30} -> 21.5, {i_, i_} -> i}, {50, 50}]
 Out[1]=
This shows a visual representation of the matrix elements.
 In[2]:=  ListDensityPlot[-m]

 Out[2]=
Here are the four largest eigenvalues of the matrix.
 In[3]:=  Eigenvalues[m, 4]
 Out[3]=
Dot gives a SparseArray result.
 In[4]:=  m . m
 Out[4]=
You can extract parts just like in an ordinary array.
 In[5]:=  %[[20, 20]]
 Out[5]=

You can apply most standard structural operations directly to SparseArray objects, just as you would to ordinary lists. When the results are sparse, they typically return SparseArray objects.

 Dimensions[m] the dimensions of an array ArrayRules[m] the rules for non-zero elements in an array m[[i, j]] element i, j m[[i]] the i row m[[All, j]] the i column m[[i, j]] = v reset element i, j

A few structural operations that can be done directly on SparseArray objects.
This gives the first column of m. It has only 2 non-zero elements.
 In[6]:=  m[[All, 1]]
 Out[6]=
This adds 3 to each element in the first column of m.
 In[7]:=  m[[All, 1]] = 3 + m[[All, 1]]
 Out[7]=
Now all the elements in the first column are non-zero.
 In[8]:=  m[[All, 1]]
 Out[8]=
This gives the rules for the non-zero elements on the second row.
 In[9]:=  ArrayRules[m[[2]]]
 Out[9]=

 SparseArray[rules] generate a sparse array from rules CoefficientArrays[{, , ... }, {, , ... }] get arrays of coefficients from equations Import["file.mtx"] import a sparse array from a file

Typical ways to get sparse arrays.
This generates a tridiagonal random matrix.
 In[10]:=  SparseArray[{i_, j_} /; Abs[i-j] 1 :> Random[], {100, 100}]
 Out[10]=
Even the tenth power of the matrix is still fairly sparse.
 In[11]:=  MatrixPower[%, 10]
 Out[11]=
This extracts the coefficients as sparse arrays.
 In[12]:=  s = CoefficientArrays[{c + x - z 0, x + 2 y + z 0}, {x, y, z}]
 Out[12]=
Here are the corresponding ordinary arrays.
 In[13]:=  Normal[%]
 Out[13]=
This reproduces the original forms.
 In[14]:=  s[[1]] + s[[2]] . {x, y, z}
 Out[14]=
CoefficientArrays can handle general polynomial equations.
 In[15]:=  s = CoefficientArrays[ {c + x^2 - z 0, x^2 + 2 y + z^2 0}, {x, y, z}]
 Out[15]=
The coefficients of the quadratic part are given in a rank 3 tensor.
 In[16]:=  Normal[%]
 Out[16]=
This reproduces the original forms.
 In[17]:=  s[[1]] + s[[2]] . {x, y, z} + s[[3]] . {x, y, z} . {x, y, z}
 Out[17]=

For machine-precision numerical sparse matrices, Mathematica supports standard file formats such as Matrix Market (.mtx) and Harwell-Boeing. You can import and export matrices in these formats using Import and Export.

THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.