# nzmax
为非零矩阵元素分配的存储量
函数库: TyMath
# 语法
n = nzmax(S)
# 说明
n = nzmax(S) 返回为稀疏矩阵 S 中的非零元素分配的存储空间量。
如果 S 为满矩阵,则 nzmax(S) 等于 prod(size(S))。
通常,nnz(S) 和 nzmax(S) 相同。但如果 S 由可生成填充矩阵元素的运算所创建,例如稀疏矩阵乘法或稀疏 LU 分解,则分配的存储空间可能大于实际需要的存储空间,并且 nzmax(S) 会反映这一情况。示例
# 示例
为矩阵元素分配存储量
创建一个 10x10 的随机矩阵,且将绝对值小于 0.5 的元素设为 0 ,赋值给 A ,然后计算其存储量。
using TyMath
using TyBase
rng = MersenneTwister(1234)
A = map(x->abs(x)<0.5 ? 0 : x, rand(rng,10,10))
nzmax_full = nzmax(A)
nnz_full = length(find(A.!=0))
nzmax_full = 100
nnz_full = 43
因为矩阵 A 为满矩阵, nzmax(A) 返回 prod(size(A)) 。
将 A 转为稀疏矩阵,然后计算其存储量。
A = sparse(A)
nzmax(A)
ans = 43
可以看到,此时的 nzmax 与 A 的非零元数目相同。发现 A 的第一个元素非零,将其设为零然后计算其存储量。
A[1,1] = 0
nzmax_full = nzmax(A)
nnz_ful = 100 - length(find(A.==0))
nzmax_full = 43
nnz_full = 42
可以看到,此时的 nzmax 不等于矩阵的非零元数量。这是因为 Syslab 并不动态地为稀疏矩阵析出零元,因此一些情况下即使将稀疏矩阵中数据置零,为其分配的存储量也没有改变。