Matlab学习笔记 Day7
注:仅供学习使用,部分内容来自学校课程课件或网络,理性探讨。
1.元胞数组内容的调取
圆括号:元胞外标识
花括号:元胞内编址
以此题为例:
创建一个2x3的元胞数组,然后调取其元素。
>> A = {'This is a example',{'First line','Second line','Third line'}...
,zeros(2,3,4);char('First line','Second line','Third line'),magic(3),...
'OK'};
(1)调取一个元胞
>> c11=A(1,1),class(c11)
c11 =
1×1 cell array
{'This is a example'}
ans =
'cell'
(2)调取一个元胞的内容
>> a11=A{1,1},class(a11)
a11 =
'This is a example'
ans =
'char'
(3)调取一个元胞的内部信息
>> a21=A{2,1},a21(1,:),a21(2,:)
a21 =
3×11 char array
'First line '
'Second line'
'Third line '
ans =
'First line '
ans =
'Second line'
(4)子元胞数组(用圆括号)
>> B1=A(1,:),B2=A(:,2)
B1 =
1×3 cell array
{'This is a example'} {1×3 cell} {2×3×4 double}
B2 =
2×1 cell array
{1×3 cell }
{3×3 double}
(5)同时调取多个内容
可以利用deal函数把输入参数逐个分配给输出参数。利用help deal命令查看。
2.元胞数组的扩展、收缩和重组
元胞数组的扩展、收缩和重组的方法大致与数值数组的情况相同。重组用reshape()函数。
3.获取元胞数组的信息
class(c ):返回变量C的类型,若C是元胞数组,则返回’cell’
iscell( c ):判断C是否为元胞数组,若是则返回1,反之返回0
ndims( c ):返回元胞数组我维数
S=size( C )或[m,n]=size( C ) 返回元胞数组C各维的大小
m=size(c,1)返回元胞数组c的行数
n=size(c,2)返回元胞数组c的列数
numel( c ):返回元胞数组c中元胞的个数
length( c ):等于max(size ( c )),若c只有一行一列元胞,则length( c )等于numel( c )
A=cellfun(Fun,c):将Fun指定的函数作用于元胞数组C的每一个元胞,将结果返回到A中。A的维数、大小与C相同。
4.元胞数组转换函数
C = num2cell(x)
将数值数组转换为维数大小相同的元胞数组C
C = mat2cell(X,M,N)
将矩阵X分块后存储转换为元胞数组C,M,N一般为向量,M,N的元素决定了矩阵的分块情况。
M = cell2mat( c ) 把合适的元胞数组转化为矩阵
关于3和4两条内容可以具体查看matlab的帮助文件。
5.架构数组的特点
①与元胞数组一样,架构数组也能在一个数组里存放各种不同类型的数据。
类似于C语言中结构型数组,但组织数据的能力比C语言中的结构型数组灵活。
②每个元素都是一个架构,数组中每个架构是平等的。以下标来区分,每个架构由若干个“域”组成,每个域必须有自己的名字,叫做域名。域的取值叫做域值。在实际应用中部分域值可以不赋值。
③可以存储任意类型、长度的数据。一个架构数组中不同架构的同名域可以存储不同类型的数据。
④维数不受限制,有单下标和全下标编址两种对架构的编址方法。
6.架构数组的创建
(1)直接创建(直接对各个架构的域赋值)
>> s.name = 'Xiao Mu';
>> s.birth = '1112';
>> s.sex = 'W';
>> s
s =
struct:
name: 'Xiao Mu'
birth: '1112'
sex: 'W'
(2)利用构造函数struct创建
s = struct(‘field1’,VALUES1,‘field2’,VALUES2,…)
用指定的域名和域值创建架构数组S,其中VALUES必须是大小相同的元胞数组、1x1的元胞数组或其他类型任意数据,也可以为空[ ],除了1x1元胞数组外,其他元胞数组大小必须相同。
>> s = struct('name','Xiao Mu','birth','1112','sex','w')
s =
struct:
name: 'Xiao Mu'
birth: '1112'
sex: 'w'
(3)利用转换函数创建
S = cell2struct(C,fields,d)
把元胞数组C转换为架构数组S,d表示将d维转化为域,fields给出了转换后的域名字符串
C = struct2cell(S)
把MxN的架构数组S(设有P个域)转换为PXMXN的元胞数组