有提供有关的稀疏矩阵的非零元素的高级别信息几个命令:
要尝试一下这些加载提供稀疏矩阵west0479
,哈威尔波音集合中的一个。
加载west0479谁是
名称大小字节类属性west0479 479x479 34032双疏
这个矩阵模型八级化学蒸馏塔。
试试这些命令。
NNZ(west0479)
ANS = 1887
格式短Ëwest0479
west0479 =(25,1)1.0000e + 00(31,1)-3.7648e-02(87,1)-3.4424e-01(26,2)1.0000e + 00(31,2)-2.4523e-02(88.2)-3.7371e-01(27.3)1.0000e + 00(31,3)-3.6613e-02(89,3)-8.3694e-01(28,4)1.3000e + 02。。。
非零(west0479)
ANS = 1.0000e + 00 -3.7648e-02 -3.4424e-01 1.0000e + 00 -2.4523e-02 -3.7371e-01 1.0000e + 00 -3.6613e-02 -8.3694e-01 1.3000e + 02。。。
用按Ctrl + C停止非零
在任何时候上市。
请注意,最初NNZ
具有相同的值作为nzmax
默认。即,非零元素的数目等于分配用于非零元素存储位置的数目。然而,MATLAB®如果零出额外的数组元素不会动态释放内存。改变一些矩阵元素为零的值改变的值NNZ
,但不是的nzmax
。
但是,您可以根据需要添加尽可能多的非零元素的矩阵。你是不是原来的值的约束nzmax
。
对于任何矩阵,充分或稀疏,在找
函数返回的索引和非零元素的值。其语法是
[I,J,S] =发现(S)
找
返回向量的非零值的行索引一世
中,列索引向量中Ĵ
,并在矢量中的非零值本身小号
。下面使用的例子找
以定位在稀疏矩阵中的非零元素的索引和值。该疏
功能用途找
输出,与基体的尺寸一起,来重建矩阵。
[I,J,S] =发现(S);[M,N] =尺寸(S);S =稀疏(I,J,S,M,N)
因为稀疏矩阵被存储在压缩稀疏列格式,存在与索引为稀疏矩阵以外还有与分度成一个完整的矩阵相关联的不同成本。这样的成本可以忽略不计的时候,你只需要改变一个稀疏矩阵的几个元素,所以在这种情况下是正常的使用规则排列索引重新分配值:
B = speye(4);[I,J,S] =查找(B);[I,J,S]
ANS = 1 1 1 2 2 1 3 3 1 4 4 1
B(3,1)= 42;[I,J,S] =查找(B);[I,J,S]
ANS = 1 1 1 3 1 42 2 2 1 3 3 1 4 4 1
42
在(3,1)
,MATLAB插入一个额外的行到非零值的矢量和标矢量,然后转移所有基质的值后(3,1)
。
如果线性指数超过使用线性索引访问或分配在一个大稀疏矩阵的元素将失败2 ^ 48-1
,这是上限为允许在一个矩阵中的元素的数量的电流。
S = spalloc(2 ^ 30,2 ^ 30,2);S(端)= 1
超过由程序允许的最大变量的大小。
要访问一个元件,其线性索引大于intmax
中,使用数组索引:
S(2 ^ 30,2 ^ 30)= 1
S =(1073741824,1073741824)1
而索引的成本为稀疏矩阵来改变单个元件是可以忽略的,它在一个循环的上下文中进行配料,并可以成为大矩阵相当缓慢。出于这个原因,在许多稀疏矩阵元素需要改变的情况下,最好是矢量化操作,而不是使用循环。例如,考虑稀疏矩阵:
N = 10000;A = 4 * speye(N);
一个
内的循环需要的是比类似矢量操作慢:抽动;A(1:N-1,N)= - 1;A(N,1:N-1)= -1;TOC
经过时间是0.003344秒。
抽动;对于K = 1:N-1,C(K,N)= - 1;C(N,K)= -1;结束,TOC
经过时间是0.448069秒。
一个
每一次通过循环期间。
预分配为稀疏矩阵的存储器中,然后填充在其逐元素方式同样导致索引到所述稀疏数组的开销显著量:
S1 = spalloc(1000,1000,100000);抽动;对于n = 1时:100000 I =小区(1000 *兰特(1,1));J =小区(1000 *兰特(1,1));S1(I,J)=兰特(1,1);结束TOC
经过时间是2.577527秒。
构建索引和值向量无需索引稀疏数组,因而显著更快:
I =小区(1000 *兰特(100000,1));J =小区(1000 *兰特(100000,1));V =零(大小(I));对于n = 1时:100000 V(N)=兰特(1,1);结束抽动;S2 =稀疏(I,J,V,1000,1000);TOC
经过时间是0.017676秒。
出于这个原因,它是最好的构建稀疏矩阵一次全部使用建筑功能,如疏
要么spdiags
功能。
例如,假设你想要的坐标矩阵的稀疏形式C
:
直接与构造的五列的矩阵疏
使用该行下标,下标列,和值三元组对功能:
I = [1 5 2 5 3 5 4 5 1 2 3 4 5]';J = [1 1 2 2 3 3 4 4 5 5 5 5 5]';S = [4 1 4 1 4 1 4 1 -1 -1 -1 -1 4]';C =稀疏(I,J,S)
C =(1,1)4(5,1)1(2,2)4(5,2)1(3,3)4(5,3)1(4,4)4(5,4)1(1,5)-1-(2,5)-1(3,5)-1(4,5)-1(5,5)4
通常是使用一个图形格式的稀疏矩阵中查看非零元素的分布是有用的。在MATLAB间谍
函数产生稀疏结构,其中图上的每个点代表一个非零数组元素的位置的模板图。
例如:
加载供给稀疏矩阵west0479
,哈威尔波音集合中的一个。
加载west0479
查看稀疏结构。
间谍(west0479)