有许多函数允许获得与稀疏矩阵有关的信息。其中最基本的是issparse,用于标识特定的Octave对象是否实际上是稀疏矩阵。
另一个非常基本的函数是nnz,用于返回稀疏矩阵中的非零项的数量,而函数nzmax返回赋值给稀疏矩阵的存储量。请注意,Octave倾向于一有机会就为稀疏对象裁剪未使用的内存。在某些情况下,用户创建的sparse对象的数量是nzmax而不是nnz,但总的来说,他们会给出相同的结果。函数spstats返回稀疏矩阵的一些基本统计信息,包括元素数、每列的均值和方差。
n =
nzmax (SM)
¶返回赋值给稀疏矩阵SM的存储量.
编程注意事项:Octave倾向于在第一次机会为稀疏对象裁剪未使用的内存。因此,一般来说nzmax
将等于nnz
,但用户创建的稀疏对象的某些情况除外。
此外,请注意Octave始终为至少一个值保留存储空间。因此,对于空矩阵nnz
将返回0,但是nzmax
将返回1。
[count, mean, var] =
spstats (S)
¶[count, mean, var] =
spstats (S, j)
¶返回稀疏矩阵的非零元素的统计信息S.
count是每列中非零的数量,mean是每列中非零的平均值,以及var是每列中非零的方差。
使用两个输入参数调用,如果S是数据和j是数据的二进制数,计算每个bin的统计数据。在这种情况下,bin可以包含零的数据值,而使用spstats (S)
零可能会消失。
在求解涉及稀疏矩阵的线性方程时,Octave确定了基于矩阵类型求解方程的方法(详见稀疏矩阵上的线性代数). 当div(/)或ldiv(\)运算符首次用于矩阵,然后缓存该类型时,Octave会探测矩阵类型。然而矩阵类型函数可用于在使用div或ldiv运算符之前确定稀疏矩阵的类型。例如
a = tril (sprandn (1024, 1024, 0.02), -1) ... + speye (1024); matrix_type (a); ans = Lower
表明Octave正确地确定了下三角矩阵的矩阵类型。矩阵类型也可以用于强制矩阵的类型为特定类型。例如
a = matrix_type (tril (sprandn (1024, ... 1024, 0.02), -1) + speye (1024), "Lower");
这使得确定矩阵类型的成本得以降低。然而,错误地定义矩阵类型将导致线性方程组解的正确结果,因此正确识别矩阵类型完全是用户的责任
有几种图形方法可以找出关于稀疏矩阵的信息。第一个是spy命令,它显示矩阵的非零元素的结构体。详见图22.1,spy的示意图。可以使用获得更高级的treeplot, etreeplot和gplot图形信息命令。
图22.1:简单稀疏矩阵的结构体。
稀疏矩阵的一个用途是在图论中,其中节点之间的互连表示为邻接矩阵。也就是说,如果图中的第i个节点连接到第j个节点。则稀疏邻接矩阵的第i个节点(在无向图的情况下,第j个节点)是非零的。如果每个节点都与一组坐标相关联,那么gplot命令可用于以图形方式显示节点之间的互连。
作为使用的一个琐碎示例gplot考虑该示例,
A = sparse ([2,6,1,3,2,4,3,5,4,6,1,5], [1,1,2,2,3,3,4,4,5,5,6,6],1,6,6); xy = [0,4,8,6,4,2;5,0,5,7,5,7]'; gplot (A,xy)
它创建了一个邻接矩阵A
其中节点1与节点2和6相连,节点2与节点1和3相连,等等。节点的坐标xy
在nx2矩阵中给出。详见图22.2.
图22.2:gplot命令的简单使用
Cholesky因子分解的节点之间的依赖性可以在线性时间内计算,而无需通过etree
命令此命令返回矩阵的消去树,并可通过命令以图形方式显示treeplot (etree (A))
如果A
对称或treeplot (etree (A+A'))
否则
(x)
¶(…, markersize)
¶(…, line_spec)
¶绘制稀疏矩阵的稀疏模式x.
指定可选的数字参数markersize则确定绘图中使用的符号的大小。
指定可选字符串line_spec则将其传递给plot
并确定绘图的外观。
p =
etree (S)
¶p =
etree (S, typ)
¶[p, q] =
etree (S, typ)
¶返回矩阵的消去树S.
默认情况下S被假定为对称的,并且返回对称消去树。参数typ控制是否返回对称或列消除树。typ的有效值是"sym"
或"col"
,分别用于对称或列消去树。
如果指定第二个参数,etree
还返回树上的排序后排列。
(A)
¶(A, node_style, edge_style)
¶绘制矩阵的消去树A或A+A'
,如果A不对称。
可选参数node_style和edge_style定义输出样式。
(A, xy)
¶(A, xy, line_style)
¶[x, y] =
gplot (A, xy)
¶绘制从A和xy在图论意义上定义的图形。
A是要绘制的数组的邻接矩阵,xy是一个nx2矩阵,包含图的节点的坐标。
可选参数line_style定义批次的输出样式。在没有输出参数的情况下调用,则直接绘制图形。否则,返回x和y中的绘图坐标.
(tree)
¶(tree, node_style, edge_style)
¶制作树或森林的图形。
第一个参数是父节点的行向量。
可选参数node_style和edge_style定义输出打印样式。
该算法的时间和空间复杂度为O(n)。
[x, y] =
treelayout (tree)
¶[x, y] =
treelayout (tree, permutation)
¶[x, y, h, s] =
treelayout (…)
¶树布局,布局一个树或一个森林。
第一个参数tree是祖先的向量。
可选参数permutation是一个后序排列。
该算法的时间和空间复杂度为O(n)。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2