数学建模社区-数学中国
标题: sparse数据类型 [打印本页]
作者: 森之张卫东 时间: 2015-9-26 22:55
标题: sparse数据类型
sparse数据类型在MATLAB中有一个专门的数据类型,用来对稀疏进行运算。sparse数据类型不同于doulbe数据,它在内存中只存储非零元素。实际上,sparse数据类型只存储每一个非零元素的三个值:元素值,元素的行号和列号。尽管非零元素这三个值必须存储在这内存,但相对于存储稀疏矩阵的所有元素来说要简单高效得多。
我们用10×10的方阵来说明稀疏矩阵的应用。
>> a = eye(10)
a =
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
如果这个矩阵被转化为稀疏矩阵,它的结果是
>> as = sparse(a)
as =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
(6,6) 1
(7,7) 1
(8,8) 1
(9,9) 1
(10,10) 1
注意在稀疏矩阵存储的是行列地址和这一点所对应的非零数据值。只要一个矩阵的大部分数都是0,这种方法用来存储数据就是高效的,但是如果非零元素很多的话,那么用占用更多的空间,因为稀疏矩阵需要存储蓄地址。函数issparse通常用作检测一个矩阵是否为稀疏矩阵。如果这个矩阵是稀疏的,那么这个函数将会返回1。
稀疏矩阵的优点可以通过下面的描述体现出来,考虑一个1000×1000的矩阵平均每一行只有4个非零元素。如果这个矩阵以全矩阵的形式储存,那么它要战胜8000000个字节。从另一方面说,如果它转化为一个稀疏矩阵,那么内存的使用将会迅速下降。
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |