({{, (RefLink[ArrayRules, paclet:ref/ArrayRules])[(RefLink[SparseArray, paclet:ref/SparseArray])[…]]
gives the rules {(Subscript[pos, 1])->(Subscript[val, 1]),(Subscript[pos, 2])->(Subscript[val, 2]),…} specifying elements in a sparse array. }, {, (RefLink[ArrayRules, paclet:ref/ArrayRules])[list]
gives rules for (RefLink[SparseArray, paclet:ref/SparseArray])[list]. }})

OpenersNotesSection(Spacer1)Details

The last element of (RefLink[ArrayRules, paclet:ref/ArrayRules])[s] is always {_,_,…}->def, where def is the default value for unspecified elements in the sparse array. »

(RefLink[ArrayRules, paclet:ref/ArrayRules])[list,val] takes the default value to be val. »

(RefLink[ArrayRules, paclet:ref/ArrayRules])[list] assumes a default value of 0. »

OpenersPrimaryExamplesSection(Spacer1)Examples  (9)

OpenersExampleSection0(Spacer1)Basic Examples  (1)

Get the explicit elements in a (RefLink[SparseArray, paclet:ref/SparseArray]):

s=SparseArray[{{i_,j_}/;Abs[i-j]≤1->-2+3Abs[i-j]},{5,5}]

ar=ArrayRules[s]

These rules are sufficient to efficiently construct an identical (RefLink[SparseArray, paclet:ref/SparseArray]):

s2=SparseArray[ar]

s===s2

OpenersExampleSection1(Spacer1)Scope  (2)

The last element of (RefLink[ArrayRules, paclet:ref/ArrayRules])[s] is always {_,_,…}->def:

m=RandomInteger[2,{3,3}]

A (RefLink[SparseArray, paclet:ref/SparseArray]) with a default value of 2:

s2=SparseArray[m,Automatic, 2]

ar2=ArrayRules[s2]

You can override this by explicitly specifying what default you would like:

ar1=ArrayRules[s2,1]

These will construct a (RefLink[SparseArray, paclet:ref/SparseArray]) identical to (RefLink[SparseArray, paclet:ref/SparseArray])[m,(RefLink[Automatic, paclet:ref/Automatic]),1]:

SparseArray[ar1,{3,3}]===SparseArray[m,Automatic,1]

Positions of 1 in an explicit array with the default taken to be 0:

a= RandomInteger[1,{2,2,2}]

ArrayRules[a]

These will construct a (RefLink[SparseArray, paclet:ref/SparseArray]) identical to (RefLink[SparseArray, paclet:ref/SparseArray])[a]:

SparseArray[%,{2,2,2}]===SparseArray[a]

Positions of 0 with 1 taken as default:

ArrayRules[a,1]

These will construct a (RefLink[SparseArray, paclet:ref/SparseArray]) identical to (RefLink[SparseArray, paclet:ref/SparseArray])[a,(RefLink[Automatic, paclet:ref/Automatic]),1]:

SparseArray[%,{2,2,2}]===SparseArray[a,Automatic, 1]

OpenersExampleSection2(Spacer1)Applications  (4)

Get the number of explicit elements in a (RefLink[SparseArray, paclet:ref/SparseArray]):

s=SparseArray[RandomChoice[{100,1}->{0,1},1000]]

Length[ArrayRules[s]]-1

Get the explicit elements of a sparse array satisfying a condition:

SeedRandom[1234];s = SparseArray[RandomInteger[{1,9},{19,2}]->RandomInteger[{-9,9},19],{9,9}]

Note the more complicated pattern is needed since (RefLink[Cases, paclet:ref/Cases]) has special behavior for (RefLink[Rule, paclet:ref/Rule]):

Cases[ArrayRules[s],(r:(_->x_/;Positive[x]))->r]

(RefLink[SparseArray, paclet:ref/SparseArray]) objects with positive and negative values:

spos=SparseArray[%,Dimensions[s]]

sneg=SparseArray[Cases[ArrayRules[s],(r:(_->x_/;Negative[x]))->r],Dimensions[s]]

Get the upper and lower triangular parts of a sparse matrix:

s=SparseArray[{{1,-2,1,0,0},{0,1,-2,1,0},{0,0,1,-2,1},{0,0,0,1,-2},{-2,-3,-4,-5,-6}}]

upperrules=Cases[ArrayRules[s],(r:({i_,j_}/;i≤j->_))->r]

u=SparseArray[upperrules,Dimensions[s]]

Lower triangular part with 1s on the diagonal:

lowerrules=Cases[ArrayRules[s],(r:({i_,j_}/;i>j->_))->r];
l=SparseArray[Append[lowerrules,{i_,i_}->1],Dimensions[s]]

This just happens to be the LU decomposition of a tridiagonal matrix:

MatrixForm[(l.u)[[{5,1,2,3,4}]]]

Make a plot showing the positions of the explicit elements of a (RefLink[SparseArray, paclet:ref/SparseArray]) with tooltips:

s=SparseArray[{{i_,i_}->1/i,{i_,j_}/;Mod[i+2 j,4]==0->1/(i+j)},{10,10}]

ListPlot[Apply[Tooltip,Drop[ArrayRules[s],-1],{1}],AspectRatio->1,PlotStyle->PointSize[1/10],PlotMarkers->{"■"}]

(RefLink[MatrixPlot, paclet:ref/MatrixPlot]) generally makes a visually better plot:

MatrixPlot[s]

OpenersExampleSection3(Spacer1)Properties & Relations  (2)

For a (RefLink[SparseArray, paclet:ref/SparseArray]) s, (RefLink[SparseArray, paclet:ref/SparseArray])[ArrayRules[s],(RefLink[Dimensions, paclet:ref/Dimensions])[s]] is identical to s:

s=SparseArray[RandomInteger[{1,9},{5,2}]:>RandomInteger[{-9,9}],{10,10}]

ar = ArrayRules[s]

s===SparseArray[ar,Dimensions[s]]

Specifying the dimensions is needed since they would be inferred from explicit elements:

{Max[ar[[1;;-2,1,1]]],Max[ar[[1;;-2,1,2]]]}

SparseArray[ar]

For an explicit array (RefLink[ArrayRules, paclet:ref/ArrayRules]) can be written in terms of (RefLink[Position, paclet:ref/Position]):

par[list_?ArrayQ,def_:0]:=Module[{n=ArrayDepth[list], pos},pos=Position[list,x_/;x≠def,{n}];
Append[Thread[pos->Extract[list,pos]],Table[_,{n}]->def]]

a=RandomInteger[1,{2,3}]

par[a]

%===ArrayRules[a]

par[a,1]===ArrayRules[a,1]

This will not work for (RefLink[SparseArray, paclet:ref/SparseArray]) objects because pattern matching works on the (RefLink[FullForm, paclet:ref/FullForm]):

Position[SparseArray[a],x_/;x≠0,{ArrayDepth[a]}]

FullForm[SparseArray[a]]

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(RefLink[SparseArray, paclet:ref/SparseArray])  ▪  (RefLink[Position, paclet:ref/Position])  ▪  (RefLink[Normal, paclet:ref/Normal])  ▪  (RefLink[Keys, paclet:ref/Keys])  ▪  (RefLink[Values, paclet:ref/Values])}})}})

({{DocumentationFooterIconsRelatedTutorial.png, ({{Tutorials}, {▪(RefLinkPlain[Getting and Setting Pieces of Matrices, paclet:tutorial/GettingAndSettingPiecesOfMatrices])}, {▪(RefLinkPlain[Sparse Arrays: Manipulating Lists, paclet:tutorial/SparseArrays-ManipulatingLists])}, {▪(RefLinkPlain[Sparse Arrays: Linear Algebra, paclet:tutorial/SparseArrays-LinearAlgebra])}})}})

({{DocumentationFooterIconsRelatedGuide.png, ({{Related Guides}, {▪(RefLinkPlain[Sparse Arrays, paclet:guide/SparseArrays])}, {▪(RefLinkPlain[Parts of Matrices, paclet:guide/PartsOfMatrices])}, {▪(RefLinkPlain[Matrices and Linear Algebra, paclet:guide/MatricesAndLinearAlgebra])}, {▪(RefLinkPlain[Elements of Lists, paclet:guide/ElementsOfLists])}})}})