gives the rules {pos1val1,pos2val2,…} specifying elements in a sparse array.
ArrayRules[list]
gives rules for SparseArray[list].
ArrayRules
gives the rules {pos1val1,pos2val2,…} specifying elements in a sparse array.
ArrayRules[list]
gives rules for SparseArray[list].
Details
- The last element of ArrayRules[s] is always {_,_,…}->def, where def is the default value for unspecified elements in the sparse array. »
- ArrayRules[list,val] takes the default value to be val. »
- ArrayRules[list] assumes a default value of 0. »
Examples
open all close allBasic Examples (1)
Get the explicit elements in a 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 SparseArray:
s2 = SparseArray[ar]s === s2Scope (2)
The last element of ArrayRules[s] is always {_,_,…}->def:
m = RandomInteger[2, {3, 3}]A 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 SparseArray identical to SparseArray[m,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 SparseArray identical to SparseArray[a]:
SparseArray[%, {2, 2, 2}] === SparseArray[a]Positions of 0 with 1 taken as default:
ArrayRules[a, 1]These will construct a SparseArray identical to SparseArray[a,Automatic,1]:
SparseArray[%, {2, 2, 2}] === SparseArray[a, Automatic, 1]Applications (4)
Get the number of explicit elements in a SparseArray:
s = SparseArray[RandomChoice[{100, 1} -> {0, 1}, 1000]]Length[ArrayRules[s]] - 1Get 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 Cases has special behavior for Rule:
Cases[ArrayRules[s], (r : (_ -> x_ /; Positive[x])) -> r]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 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 -> {"■"}]MatrixPlot generally makes a visually better plot:
MatrixPlot[s]Properties & Relations (2)
For a SparseArray s, SparseArray[ArrayRules[s],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 ArrayRules can be written in terms of 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 SparseArray objects because pattern matching works on the FullForm:
Position[SparseArray[a], x_ /; x ≠ 0, {ArrayDepth[a]}]FullForm[SparseArray[a]]See Also
Related Guides
History
Introduced in 2003 (5.0)
Text
Wolfram Research (2003), ArrayRules, Wolfram Language function, https://reference.wolfram.com/language/ref/ArrayRules.html.
CMS
Wolfram Language. 2003. "ArrayRules." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/ArrayRules.html.
APA
Wolfram Language. (2003). ArrayRules. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ArrayRules.html
BibTeX
@misc{reference.wolfram_2026_arrayrules, author="Wolfram Research", title="{ArrayRules}", year="2003", howpublished="\url{https://reference.wolfram.com/language/ref/ArrayRules.html}", note=[Accessed: 12-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_arrayrules, organization={Wolfram Research}, title={ArrayRules}, year={2003}, url={https://reference.wolfram.com/language/ref/ArrayRules.html}, note=[Accessed: 12-June-2026]}