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[]转换为 QuantitySparseArray
    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 对象是普通数组的表示,所以很多函数会像其在普通数组上那样作用. 范例包括像 DimensionsPartPlusLinearSolve 的函数.
  • SparseArray[data,] 通常会转换为最优标准格式,其结构为 SparseArray[Automatic,dims,val,].
  • SparseArray 被像 AtomQ 和目的为模式匹配的的函数视为原始对象.
  • 默认情况下,SparseArray 将未指定的元素值 val 视为零.
  • SparseArray 中的元素不需要是数字,但其本身不能是列表.
  • SparseArray[][prop] 给出 SparseArray 对象的属性 prop. 可能会给出下列属性:
  • "ImplicitValue"给出未明确指定值的元素
    "ExplicitLength"给出明确值的数量
    "ExplicitValues"给出明确值的列表
    "ExplicitPositions"给出对应明确值的位置列表
    "ColumnIndices"根据压缩稀疏行表示给出列索引
    "RowPointers"根据压缩稀疏行表示给出行指针
    "BandWidth"给出稀疏矩阵非对角线带宽
    "Density"给出明确值元素数量和总元素数量的比例

范例

打开所有单元关闭所有单元

基本范例  (1)

构造稀疏数组,只指定部分位置元素的值:

以矩阵形式显示:

转换为一个稠密矩阵:

范围  (7)

创建一个大型的稀疏向量:

创建一个大型稀疏矩阵:

创建一个大型的深度为 3 的数组:

创建一个三对角矩阵,用下标的模式:

创建一个 10,000 10,000 矩阵:

创建一个稀疏的对角矩阵:

它等同于 DiagonalMatrix

一个稀疏矩阵占用较少的内存:

用规则 Band 构建一个分块对角矩阵:

将一个普通矩阵转化为一个稀疏矩阵:

创建一个4阶稀疏张量,设置随机位置的值:

ArrayRules 生成一个规则的最小列表,它需要指定 SparseArray

许多典型的操作对 SparseArray 对象起作用,对其它同类型列表也起作用:

适用于元素的算法同样适用于列表:

矩阵积采用 Dot

许多线性代数函数可以用稀疏的形式:

许多其它列表命令自动运算:

推广和延伸  (2)

未说明的元素可以使任意值:

构建一个有机器精度数值的稀疏矩阵:

用确切整数值构建稀疏矩阵:

N[s]ns 相同:

应用  (4)

创建一个只有单一非0元素的列表:

绘制一个规则列表:

表示一个有联结矩阵的网络:

利用有限的不同的点, 求解边界值问题

属性和关系  (3)

一个 SparseArray 对象和相应的普通列表 Equal

它们不是 SameQ,因为表达结构不同:

涉及到 SparseArray 对象的函数 f,通常 f[s]==f[Normal[s]]

这包括具有属性 Listable 的所有函数:

使用 CoefficientArrays 把线性表达式转换成 SparseArray 对象:

使用 DotSparseArray 转换成表达式:

可能存在的问题  (8)

如果 SparseArray 中同一坐标位置在变换规则表中重复出现, 以首次出现的为准:

由于数据量过大而无法全部表示时,SparseArray 给出下面的表现形式:

Normal 会给出一个 SystemException:

在默认情况下,稀疏数组的操作不会检验取消操作:

SparseArray 重新计算稀疏数组结构:

SparseArray 表示的内部结构不是唯一的,SameQ 会检测到以下情况:

使用 SparseArray 重新计算稀疏结构:

注意 Equal 可以按预期工作:

SparseArray 表示的内部结构不是唯一的,并且设置部分可以更改该结构:

测试 SparseArray 实例是否相同:

使用 SparseArray 重新计算稀疏结构:

注意 Equal 可以按预期工作:

在对 SparseArray 进行迭代计算时. 有误差的操作可能会给出不同的值:

ReapSow,可以显示存取的元素:

对于一个 SparseArray 对象, Part 给出对应的列表的部分:

FullForm 是从基本存储信息中的重构对象的方式:

一些不能作用于表达式的函数,在作用于SparseArray 的对象时,该对象会被作为基本单位而无法处理:

Cases 不能作用于表示的矩阵:

可以使用 ArrayRules 的结果,这样不用展开就可以能得到信息:

巧妙范例  (1)

生命游戏:

Wolfram Research (2003),SparseArray,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SparseArray.html (更新于 2021 年).

文本

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 年

BibTeX

@misc{reference.wolfram_2024_sparsearray, author="Wolfram Research", title="{SparseArray}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/SparseArray.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_sparsearray, organization={Wolfram Research}, title={SparseArray}, year={2021}, url={https://reference.wolfram.com/language/ref/SparseArray.html}, note=[Accessed: 22-November-2024 ]}