"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}]]巧妙范例 (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]//Normalcoeffs = CoefficientList[ Normal[ Series[Exp[x], {x, 0, 16}]], x];
cf[N[coeffs], sp]//Normal更好的方法是使用 MatrixExp 函数来计算指数,但幂级数结果很接近:
MatrixExp[sp]//Normal技术笔记
历史
2021年引入 (13.0)