sparse
说明
示例
S = sparse(A ) 通过挤出任何零元素将满矩阵转换为稀疏格式。如果矩阵包含许多零,将矩阵转换为稀疏存储空间可以节省内存。
示例
S = sparse(m,n ) 生成 m ×n 全零稀疏矩阵。
示例
S = sparse(i,j ,v ) 根据 i 、j 和 v 三元组生成稀疏矩阵 S ,以便 S(i(k),j(k)) = v(k) 。max(i) ×max(j) 输出矩阵为 length(v) 非零元素分配了空间。sparse 将 v 中下标重复(在i 和 j 中)的元素加到一起。
如果输入 i 、j 和 v 为向量或矩阵,则它们必须具有相同数量的元素。参数 v 和/或 i 或 j 其中一个参数可以使标量。
示例
S = sparse(i,j ,v ,m,n ,nz ) 为 nz 非零元素分配空间。可以使用此语法为构造后要填充的非零值分配额外空间。
示例
全部折叠
使用稀疏存储空间节省内存
创建一个 10,000×10,000 的满存储单位矩阵。
Name Size Bytes Class Attributes
A 10000x10000 800000000 double
此矩阵使用 800 MB 内存。
将矩阵转换为稀疏存储。
Name Size Bytes Class Attributes
S 10000x10000 240008 double sparse
采用稀疏形式时,同一矩阵只使用约 0.25 MB 内存。在这种情况下,您可以使用 speye 函数来避免满存储,该函数可以直接创建稀疏单位矩阵。
全零稀疏矩阵
S =
All zero sparse: 10000x5000
指定大小的非零稀疏矩阵
根据 i 、j 和 v 三元组生成 1500×1500 的稀疏矩阵。
S =
(900,900) 10
(1000,1000) 100
当指定的大小大于 max(i) ×max(j) 时,sparse 函数会使用额外的零值行和列填充输出。
预分配稀疏矩阵中的存储空间
创建一个由 10 个非零值构成的稀疏矩阵,但实际上为此矩阵分配可以存储 100 个非零值的空间。
spalloc 函数可以快速创建由全零元素构成的稀疏矩阵,同时还会在此矩阵中为非零数数值分配一定的存储空间。
将值累加到稀疏矩阵
使用重复的下标将值累加到单一稀疏矩阵中,如果不如此的话,可能要使用一个或多个循环。
创建一个数据列向量和两个下标列向量。
并排显示下标和值。
ans = 8×3
6 1 100
6 1 202
6 1 173
5 2 305
10 3 410
10 3 550
9 10 323
9 10 121
使用 sparse 函数将具有相同下标的值累加。
S =
(6,1) 475
(5,2) 305
(10,3) 960
(9,10) 444
输入参数
全部折叠
A - 输入矩阵 满矩阵 | 稀疏矩阵
输入矩阵,指定为满矩阵或稀疏矩阵。如果 A 已为稀疏状态,则 sparse(A) 会返回 A 。
数据类型: double | logical 复数支持: 是
i,j - 下标对组(以单独参数指定) 标量 | 向量 | 矩阵
下标对组,指定为标量、向量或矩阵的单独参数。i 和 j 中的对应元素指定 S(i,j) 的下标对组,该对组决定 v 中的值在输出中的放置方式。如果 i 或 j 为向量或矩阵,则另一个输入可以是标量或者是具有相同元素数量的向量或矩阵。在这种情况下,sparse 会使用 i(:) 和 j(:) 作为下标。如果 i 和 j 在 v 中的几个元素具有相同的值,则这些元素会加到一起。
注意
如果 i 或 j 中的任何值大于 2^31-1 (对于 32 位平台)或 2^48-1 (64 位平台),则无法构造稀疏矩阵。
数据类型: double | logical
v - 值 标量 | 向量 | 矩阵
值,指定为标量、向量或矩阵。如果 v 是向量或矩阵,则 i 或 j 的其中一个输入必须也是具有相同数量的元素的向量或矩阵。
v 中的任何零值元素都会被忽略,因为它们是 i 和 j 的对应下标。但是,如果您不指定输出的维度大小 m 和 n ,则 sparse 在忽略 v 中的任何零值元素之前,会先计算最大值 m = max(i) 和 n = max(j) 。
数据类型: double | logical 复数支持: 是
m,n - 每个维度的大小(作为单独参数) 整数值
每个维度的大小,指定为包含整数值的单独参数。如果指定 m (行大小),则必须也指定 n (列大小)。
如果不指定 m 和 n ,则 sparse 将使用默认值 m = max(i) 和 n = max(j) 。这些最大值在删除 v 中的任何零之前进行计算。
数据类型: double
nz - 非零元素的存储空间分配 非负整数
非零元素的存储空间分配,指定为非负整数。nz 通常必须大于或等于 max([numel(i), numel(j), numel(v), 1]) 。但是,如果 i 、j 和 v 的大小允许您为 nz 指定值 0 ,则 sparse 会将该值设置为 1 。
对于稀疏矩阵 S ,nnz 函数返回矩阵中非零元素的数目,nzmax 函数返回为非零矩阵元素分配的空间量。如果 nnz(S) 和 nzmax(S) 返回不同的结果,则可能需要分配比实际需求更大的空间。鉴于此原因,请预先设置 nz ,再进行填充。
如果您不指定 nz ,则 sparse 使用默认值 max([numel(i), numel(j), numel(v), 1]) 。
数据类型: double
原文链接 https://ww2.mathworks.cn/help/matlab/ref/sparse.html
|