1 稀疏矩阵
1.1 什么是稀疏矩阵呢
一些矩阵中的大量元素为0元素,我们可以称为稀疏矩阵sparse matrix,与之相反的我们叫做全矩阵。
MATLAB的矩阵有两种存储方式:完全存储方式和稀疏存储方式。
完全存储方式
完全存储方式是将矩阵的全部元素存储,以前讲到的矩阵存储方式都是按这个方式存储的。
稀疏存储方式
稀疏存储方式仅存储矩阵所有的非零元素的值及其在矩阵中的位置,即行号和列号。在MATLAB中,稀疏存储方式是按列存储的。
1.2 稀疏矩阵使用
A = sparse(B); %将矩阵B转化为稀疏存储方式的矩阵A
A = sparse(m,n); %生成一个m×n的所有元素都是0的稀疏矩阵A
A = sparse(u,v,a); %a为非零元素,u,v为下标
A = sparse(u,v,a,m,n); %生成一个m×n的稀疏矩阵A,非零元素为a,位置(u,v)
[u,v,a] = find(A); %返回矩阵A中非0元素的下标和元素。
full(A); %返回矩阵A对应的完全存储方式矩阵。
spy(A); %观察A矩阵
a = sparse(1:1000,1:1000,1,1000,1000);
2. 结构体
2.1结构体特性
结构体在很多语言中都有,matlab的结构体允许用户将不同种类的数据存放在他的各个域中。
book.name = ‘matlab’;
book.page = 500;
book.time = 2010;
book.a = [1,3,5,7]
之后输入结构体名称就可以进行访问,也可以访问某元素:
book
book.a(2)
结构体内可以为任何变量哦,当然也可以是结构体。
2.2 结构体函数
isstruct | 判断是否为结构变量 |
isfield | 判断是否为某结构的域field |
setfield | 设置结构变量中域的值 |
getfield | 获取结构变量中域的值 |
fieldnames | 获取结构变量中所有域的名称 |
rmfield | 删除结构变量中指定的域 |
struct2cell, | 结构变量和cell元胞数组的相互转换 |
3. 元胞
matlab中,元胞可以看作是一种容器,可以存一切类型的数据,包括元胞类型。元宝组成的阵列通常称为元胞阵列。
c{1,1} = [99,67];
c{1,2} = char(‘matlab’);
c{2,1} = randn(1);
c{2,2} = book;
元胞是通过{}进行索引的。
b = {[1:3],book(2),python,{1,2}};
a = cell(2,2);
绘制元胞图像:
cellplot(c);