本文概述
- 稀疏属性
- 生成稀疏矩阵
- 使用稀疏矩阵
- 稀疏矩阵函数
该矩阵需要100个元素, 但是只有10个元素包含非零数据。这是稀疏数组或稀疏矩阵的示例。
稀疏矩阵是其中大部分元素为零的大型矩阵。
文章图片
现在假设我们创建另一个10 x 10矩阵b, 定义如下:
文章图片
如果将这两个矩阵相乘, 则结果为
文章图片
稀疏属性 MATLAB具有double数据类型的特定版本, 该版本旨在与稀疏数组一起使用。
在double数据类型的此特定版本中, 仅为数组的非零元素分配了内存位置, 并且据说该数组具有” 稀疏” 属性。
具有稀疏属性的数组将为每个非零元素保存三个值:元素本身的值以及元素所在的行号和列号。即使每个非零元素必须保存三个值, 但是如果矩阵只有几个非零元素, 则此方法比分配完整数组要有效得多。
为了说明稀疏矩阵的用法, 我们将创建一个10 x 10的单位矩阵:
文章图片
如果使用函数sparse将此矩阵转换为稀疏矩阵, 则结果为
文章图片
如果我们像whos命令一样检查数组a和, 结果为
? whos NameSizeBytesClassAttributes a10x10800double as10x10164doublesparse
一个数组占用800个字节, 因为有100个元素, 每个元素有8个字节的存储空间。 as数组占用164个字节, 因为有10个非零元素, 每个元素有8个字节的存储空间, 再加上20个数组索引, 每个数组索引分别占4个字节和4个字节的开销。请注意, 稀疏阵列比完整阵列占用的内存少得多。
函数issparse可用于确定给定数组是否稀疏。如果数组很稀疏, 则issparse(数组)将返回true(1)。
稀疏数据类型的功效可以通过考虑每行平均有4个非零元素的1000 x 1000矩阵z来看出。如果此矩阵存储为完整矩阵, 则将需要8, 000, 000字节的空间。另一方面, 如果将其转换为稀疏矩阵, 则内存使用量将急剧下降。
? zs = sparse(z);
? whos NameSizeBytesClass z1000x10008000000double array zs1000x100051188sparse array Grand total is 1003932 elements using 8051188 bytes.
生成稀疏矩阵 MATLAB可以通过使用稀疏函数将完整矩阵转换为稀疏矩阵或通过使用MATLAB函数speye, sprand和sprandn直接制作稀疏矩阵来生成稀疏矩阵, speye, sprand和sprandn是eye, rand和randn的稀疏等效项。
For example, the expression a = speye(4) generates a 4 x 4 sparse matrix.
? a = speye(4) a = (1, 1)1 (2, 2)1 (3, 3)1 (4, 4)1
表达式b = full(a)将稀疏矩阵转换为full矩阵。
? b = full (a) b = 1000 0100 00100001
使用稀疏矩阵 一旦使矩阵变得稀疏, 就可以使用简单的赋值语句将单个元素添加到其中或从中删除。
例如, 以下语句生成一个4 x 4稀疏矩阵, 然后向其添加另一个非零元素:
? a = speye (4) a = (1, 1)1(2, 2)1 (3, 3)1 (4, 4)1? a (2, 1) = -2 a = (1, 1)1 (2, 1)-2 (2, 2)1(3, 3)1(4, 4)1
稀疏矩阵函数 【MATLAB中的稀疏数组】该表显示在处理稀疏矩阵时最常用的一些功能。
Function | Description |
---|---|
full | 它将稀疏矩阵转换为完整矩阵。 |
issparse | 它确定矩阵是否稀疏。 |
nnz | 它返回非零矩阵元素的数量。 |
nonzeros | 它返回矩阵的非零元素。 |
nzmax | 它返回分配给非零元素的存储量。 |
spalloc | 它为稀疏矩阵分配空间。 |
sparse | 它创建一个稀疏矩阵或将完整的转换为稀疏。 |
speye | 它创建一个稀疏身份矩阵。 |
sprand | 它创建一个稀疏均匀分布的随机矩阵。 |
sprandn | 它创建一个稀疏的正态分布随机矩阵。 |
find | 它查找矩阵中非零元素的索引和值。 |
spones | 它将非零稀疏矩阵元素替换为1。 |
spfun | 它将函数应用于非零矩阵元素 |
spy | 它将稀疏模式可视化为情节。 |
推荐阅读
- MATLAB中的矩阵和数组
- MATLAB函数用法
- MATLAB中的多维数组
- MATLAB M文件
- 适用于MATLAB中基本操作的兼容数组大小
- MATLAB end关键字
- MATLAB错误控制语句try-catch
- MATLAB return语句
- MATLAB break语句