SparseArray
SparseArray[{pos1v1,pos2v2,…}]
生成一个除位置 posi 上的值为 vi 外其他元素为零的稀疏数组.
SparseArray[list]
生成一个稀疏数组 list.
SparseArray[data,{d1,d2,…}]
生成一个稀疏矩阵,表示一个 d1d2… 数组.
SparseArray[data,dims,val]
生成一个稀疏数组,使得该数组中未被说明的元素赋值 val.
更多信息
- SparseArray 也称为稀疏矩阵.
- 稀疏数组通常高效用于多数项为零的线性代数和图形邻接矩阵.
- 稀疏数组仅存储非零值的位置,但可表示完整数组:
- data 可有如下格式:
-
rules 指定位置和值的规则. list 将数组转换为 SparseArray SymmetrizedArray[…] 转换为 SparseArray QuantityArray[…] 转换为 Quantity 的 SparseArray SparseArray[…] 最小化明确的非零元素 - 设置 s=SparseArray[rules,…] 可使用下列规范:
-
{{i1 1,…,i1 r}v1,{i2 1,…,i2 r}v2,…} s[[i1 1, …, i1 r]] 有 v1 值,s[[i2 1, …, i2 r]] 有 v2 值,以此类推 pattv 对于所有匹配模式 patt 的 {ik 1,…,ik r} 有{{i1 1,…,i1 r}v,{i2 1,…,i2 r}v,…} patt:>v 为每个匹配位置计算值 v Band[…]vals 为所有带状结构和子区块指定值 {pos1,pos2,…}{v1,v2,…} 等价于 {pos1v1,pos2v2,…} - SparseArray 转换包括:
-
Normal[SparseArray[…]] 转换为普通 List 数组. SymmetrizedArray[SparseArray[…]] 转换为对称数组. ArrayRules[SparseArray[…]] 给出规则列表 {pos1->v1,pos2->v2,…} - SparseArray 对象是普通数组的表示,所以很多函数会像其在普通数组上那样作用. 范例包括像 Dimensions、Part、Plus 和 LinearSolve 的函数.
- SparseArray[data,…] 通常会转换为最优标准格式,其结构为 SparseArray[Automatic,dims,val,…].
- SparseArray 被像 AtomQ 和目的为模式匹配的的函数视为原始对象.
- 默认情况下,SparseArray 将未指定的元素值 val 视为零.
- SparseArray 中的元素不需要是数字,但其本身不能是列表.
- SparseArray[…][prop] 给出 SparseArray 对象的属性 prop. 可能会给出下列属性:
-
"ImplicitValue" 给出未明确指定值的元素 "ExplicitLength" 给出明确值的数量 "ExplicitValues" 给出明确值的列表 "ExplicitPositions" 给出对应明确值的位置列表 "ColumnIndices" 根据压缩稀疏行表示给出列索引 "RowPointers" 根据压缩稀疏行表示给出行指针 "BandWidth" 给出稀疏矩阵非对角线带宽 "Density" 给出明确值元素数量和总元素数量的比例
范例
打开所有单元关闭所有单元范围 (7)
它等同于 DiagonalMatrix:
用规则 Band 构建一个分块对角矩阵:
ArrayRules 生成一个规则的最小列表,它需要指定 SparseArray:
许多典型的操作对 SparseArray 对象起作用,对其它同类型列表也起作用:
矩阵积采用 Dot:
推广和延伸 (2)
属性和关系 (3)
一个 SparseArray 对象和相应的普通列表 Equal:
它们不是 SameQ,因为表达结构不同:
涉及到 SparseArray 对象的函数 f,通常 f[s]==f[Normal[s]]:
这包括具有属性 Listable 的所有函数:
使用 CoefficientArrays 把线性表达式转换成 SparseArray 对象:
使用 Dot 把 SparseArray 转换成表达式:
可能存在的问题 (8)
如果 SparseArray 中同一坐标位置在变换规则表中重复出现, 以首次出现的为准:
由于数据量过大而无法全部表示时,SparseArray 给出下面的表现形式:
用 Normal 会给出一个 SystemException:
用 SparseArray 重新计算稀疏数组结构:
SparseArray 表示的内部结构不是唯一的,SameQ 会检测到以下情况:
使用 SparseArray 重新计算稀疏结构:
注意 Equal 可以按预期工作:
SparseArray 表示的内部结构不是唯一的,并且设置部分可以更改该结构:
测试 SparseArray 实例是否相同:
使用 SparseArray 重新计算稀疏结构:
注意 Equal 可以按预期工作:
在对 SparseArray 进行迭代计算时. 有误差的操作可能会给出不同的值:
对于一个 SparseArray 对象, Part 给出对应的列表的部分:
FullForm 是从基本存储信息中的重构对象的方式:
一些不能作用于表达式的函数,在作用于SparseArray 的对象时,该对象会被作为基本单位而无法处理:
Cases 不能作用于表示的矩阵:
可以使用 ArrayRules 的结果,这样不用展开就可以能得到信息:
文本
Wolfram Research (2003),SparseArray,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SparseArray.html (更新于 2021 年).
CMS
Wolfram 语言. 2003. "SparseArray." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2021. https://reference.wolfram.com/language/ref/SparseArray.html.
APA
Wolfram 语言. (2003). SparseArray. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/SparseArray.html 年