"SparseArray" (コンパイルタイプ)
"SparseArray" (コンパイルタイプ)
"SparseArray"::[type,rank]
指定された型とランクの要素を持つ,疎配列型を表す.
詳細
- "SparseArray"はTypedおよび型を指定する関連した構造で使うことができる.
- "SparseArray"オブジェクトは自動的にメモリ管理される.
変換
- SparseArray式は,"SparseArray"で生成された型のコンパイルコード要素に変換することができる.
- "SparseArray"で生成された型のコンパイルコード要素はSparseArray式に変換することができる.
式から
式へ
例題
すべて開く すべて閉じる例 (1)
"SparseArray"はCompiledCodeFunctionの入力および出力として使うことができる:
cf = FunctionCompile[Function[Typed[arg, "SparseArray"::["Integer64", 2]], arg]]cf[SparseArray[{{1, 0, 2}, {0, 3, 0}}]]MatrixForm[%]スコープ (1)
SparseArray特性はCompiledCodeFunction内で使える場合がある:
cf = FunctionCompile[Function[Typed[arg, "SparseArray"::["MachineReal", 2]],
Module[{nz, dims, nelems },
nz = arg["ExplicitLength"];
dims = Dimensions[arg];
nelems = Typed[1., "MachineReal"];
Do[nelems *= dims[[i]], {i, Length[dims]}];
Cast[nz, "MachineReal"] / nelems
]]]cf[SparseArray[{{1., 0, 2.}, {0, 3., 0}}]]SparseArray[{{1., 0, 2.}, {0, 3., 0}}]["Density"]この関数は実数演算を使うので,要素の合計数が機械サイズの整数にとって大きすぎるときでも対応する:
cf[SparseArray[{{1, 1} -> 1.}, {10 ^ 6, 10 ^ 16}]]Neat Examples (1)
cf = FunctionCompile[Function[{
Typed[coeffs, "PackedArray"::["MachineReal", 1]],
Typed[a, "SparseArray"::["MachineReal", 2]]},
Module[{res, len, n},
n = Length[a];
len = Length[coeffs];
res = DiagonalMatrix[coeffs[[len]], 0, n, SparseArray];
Do[
res = res.a + DiagonalMatrix[coeffs[[i]], 0, n, SparseArray],
{i, len - 1, 1, -1}
];
res
]
]]sp = SparseArray[{{1, 1} -> 1., {2, 2} -> 2., {3, 3} -> 3., {1, 3} -> 4.}];
cf[{0, 0, 1}, sp]//Normal指数関数の係数を生成し,それを使って行列の指数関数を計算する:
coeffs = CoefficientList[ Normal[ Series[Exp[x], {x, 0, 16}]], x];
cf[N[coeffs], sp]//Normal指数関数を計算するにはMatrixExp関数を使った方がよいが,ベキ級数の結果は近かった:
MatrixExp[sp]//Normalテクニカルノート
履歴
2021 で導入 (13.0)