疎な配列にある要素を指定する規則{pos1val1,pos2val2,…}を与える.
ArrayRules[list]
SparseArray[list]の規則を与える.
ArrayRules
疎な配列にある要素を指定する規則{pos1val1,pos2val2,…}を与える.
ArrayRules[list]
SparseArray[list]の規則を与える.
詳細
- ArrayRules[s]の最後の要素は常に{_,_,…}->def である.ただし,def は疎な配列にある指定されていない要素のデフォルト値であるとする. »
- ArrayRules[list,val]は val というデフォルト値を取る. »
- ArrayRules[list]はデフォルト値が0であると推定する. »
例題
すべて開く すべて閉じる例 (1)
SparseArray中の明示的な要素を得る:
s = SparseArray[{{i_, j_} /; Abs[i - j] ≤ 1 -> -2 + 3Abs[i - j]}, {5, 5}]ar = ArrayRules[s]これらの規則は全く同じSparseArrayを効率的に構築するのに十分である:
s2 = SparseArray[ar]s === s2スコープ (2)
ArrayRules[s]の最終要素は常に{_,_,…}->def である:
m = RandomInteger[2, {3, 3}]デフォルト値が2のSparseArray:
s2 = SparseArray[m, Automatic, 2]ar2 = ArrayRules[s2]使用したいデフォルト値を明示的に指定することでこれを無効にすることができる:
ar1 = ArrayRules[s2, 1]次はSparseArray[m,Automatic,1]と全く等しいSparseArrayを構築する:
SparseArray[ar1, {3, 3}] === SparseArray[m, Automatic, 1]a = RandomInteger[1, {2, 2, 2}]ArrayRules[a]次は,SparseArray[a]と全く等しいSparseArrayを構築する:
SparseArray[%, {2, 2, 2}] === SparseArray[a]ArrayRules[a, 1]次は,SparseArray[a,Automatic,1]と全く等しいSparseArrayを構築する:
SparseArray[%, {2, 2, 2}] === SparseArray[a, Automatic, 1]アプリケーション (4)
SparseArray中の明示的な要素の数を得る:
s = SparseArray[RandomChoice[{100, 1} -> {0, 1}, 1000]]Length[ArrayRules[s]] - 1SeedRandom[1234];s = SparseArray[RandomInteger[{1, 9}, {19, 2}] -> RandomInteger[{-9, 9}, 19], {9, 9}]CasesはRuleに関して特別な動作をするので,より複雑なパターンが必要になる点に注意:
Cases[ArrayRules[s], (r : (_ -> x_ /; Positive[x])) -> r]正の値と負の値を持つSparseArrayオブジェクト:
spos = SparseArray[%, Dimensions[s]]sneg = SparseArray[Cases[ArrayRules[s], (r : (_ -> x_ /; Negative[x])) -> r], Dimensions[s]]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]]lowerrules = Cases[ArrayRules[s], (r : ({i_, j_} /; i > j -> _)) -> r];
l = SparseArray[Append[lowerrules, {i_, i_} -> 1], Dimensions[s]]MatrixForm[(l.u)[[{5, 1, 2, 3, 4}]]]SparseArrayの明示的な要素の位置をツールチップで示したプロットを作る:
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は一般に視覚的により映えるプロットを作る:
MatrixPlot[s]特性と関係 (2)
SparseArray s について,SparseArray[ArrayRules[s],Dimensions[s]]は s と等価である:
s = SparseArray[RandomInteger[{1, 9}, {5, 2}] :> RandomInteger[{-9, 9}], {10, 10}]ar = ArrayRules[s]s === SparseArray[ar, Dimensions[s]]次元は明示的な要素から推測されるので,これを指定する必要がある:
{Max[ar[[1 ;; -2, 1, 1]]], Max[ar[[1 ;; -2, 1, 2]]]}SparseArray[ar]明示的な配列について,ArrayRulesは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]パターンマッチはFullFormについて使えるものなので,これはSparseArrayオブジェクトではうまくいかない:
Position[SparseArray[a], x_ /; x ≠ 0, {ArrayDepth[a]}]FullForm[SparseArray[a]]関連項目
テクニカルノート
関連するガイド
-
▪
- 疎な(スパース)配列 ▪
- 行列の部分 ▪
- 行列と線形代数 ▪
- リストの要素
履歴
2003 で導入 (5.0)
テキスト
Wolfram Research (2003), ArrayRules, Wolfram言語関数, 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: 07-August-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: 07-August-2026]}