Matlab:sparse()和full()两个常用函数的理解。

sparse函数

功能:Create sparse matrix-创建稀疏矩阵

用法1:S=sparse(X)——将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,非零元素及其下标(索引)组成矩阵S。 如果X本身是稀疏的,sparse(X)返回S。

例如:

A=
     0     2     0
     4     0     6
     7     0     0

B=sparse(A)=

   (2,1)        4
   (3,1)        7
   (1,2)        2
   (2,3)        6

用法2:S = sparse(i,j,s,m,n,nzmax)——由i,j,s三个向量创建一个m*n的稀疏矩阵(上面的B矩阵形式),并且最多含有nzmax个元素。

例如:

B=sparse([1,2,3],[1,2,3],[0,1,2],4,4,4)
 
B =
   (2,2)        1
   (3,3)        2

其中i=[1,2,3],稀疏矩阵的行位置;j=[1,2,3],稀疏矩阵的列位置;s=[0,1,2],稀疏矩阵元素值。 其位置为一一对应。

m=4(>=max(i)),n=4(>=max(j)) (注:m和n的值可以在满足条件的范围内任意选取),用于限定稀疏的大小。

nzmax=4(>=max(i or j)),稀疏矩阵最多可以有nzmax个元素。

一些简写的情况: 

S = sparse(i,j,s,m,n)——nzmax = length(S) ;   

S = sparse(i,j,s)——使m = max(i) 和 n = max(j),在S中零元素被移除前计算最大值,[i j s]中其中一行可能为[m n 0];   

S = sparse(m,n)——sparse([],[],[],m,n,0)的缩写,生成一个m*n的所有元素都是0的稀疏矩阵。

 

full函数

功能:把稀疏矩阵转为全矩阵

A=full(X)——把稀疏矩阵X转换为全矩阵存储形式A。

matlab sparse matrix和full matrix

 

参考:https://www.cnblogs.com/Demo1589/p/7881762.html

### 如何在 MATLAB 中使用 `sparse` 函数 #### 创建稀疏矩阵的方法 可以通过多种语法格式来创建稀疏矩阵: - **从满矩阵转换** 当有一个已有的满矩阵A时,可以将其转化为稀疏矩阵S。 ```matlab S = sparse(A); ``` 此命令会检查输入矩阵A中的零元素,并仅保存非零元素及其位置信息以形成新的稀疏表示形式[^1]。 - **指定行列索引值向量** 对于更复杂的场景,可以直接通过提供行索引i、列索引j以及对应的非零元素s来定义一个m×n大小的稀疏矩阵。 ```matlab S = sparse(i, j, s, m, n); ``` 这里的参数分别代表了各个非零项的位置坐标与数值。注意,如果某个位置被多次赋值,则最终保留最后一次给出的那个值;而未提及到的地方默认视为0。 - **预分配空间并初始化为空** 有时为了提高效率,在事先知道最大可能存在的非零元数量的情况下,还可以预先设定好额外的空间大小nzmax用于加速后续操作。 ```matlab S = sparse(i, j, s, m, n, nzmax); ``` 这有助于减少因动态调整内部结构所带来的开销,特别是在逐步填充大型稀疏数组的过程中显得尤为重要。 - **生成全零稀疏矩阵** 另外也支持快速建立仅有特定尺寸却没有任何实际数据成员的对象实例。 ```matlab S = sparse(m, n); ``` 上述语句将会返回一个m*n规格下完全由空白占据的结果集,适用于作为模板或占位符等待后期更新具体内容。 #### 示例代码展示 下面是一些具体的例子用来说明怎样利用`sparse()`函数构建不同类型的稀疏矩阵: ```matlab % 将现有稠密矩阵转为稀疏型态 A = [0 0 1; 2 0 0; 0 3 0]; SA = sparse(A); % 使用三元组列表构造自定义模式下的稀疏对象 rowIdx = [1; 2; 3]; % 行号序列 colIdx = [3; 1; 2]; % 列号序列 values = [1; 2; 3]; % 非零元素集合 szRow = 3; szCol = 3; SB = sparse(rowIdx, colIdx, values, szRow, szCol); disp('原始矩阵:'); disp(full(SA)); disp('基于三元组创建的稀疏矩阵:'); disp(full(SB)); ``` 这段脚本首先展示了如何将常规二维表单简化成紧凑表达方式,接着又示范了一种更为灵活的手动组装途径——即依据给定的一系列离散点来拼接出目标图形轮廓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeniuHe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值