单元数组、结构数组:将不同类型、不同维数的数组组合在一起。
在单元数组中,可以通过单元数组的名字是不能访问相应的元素,只能访问对应的索引号,类似于单元数组中存储的是指向某种数据结构的指针。
1.赋值语句创建:分为内容创建和单元索引创建
内容创建:一个一个元素进行创建,用大括号
c{1,1}=[1 2;3 4]
c{1,2}='oi'
d=c{1,1}
b=c{1,2}<<
c =
1×2 cell 数组
{2×2 double} {'oi'}
d =1 2
3 4
b ='oi'
单元索引创建:一个一个单元进行创建,用小括号
c(1,1)={[1 2;3 4]}
c(1,2)={[1 2;3 4;2 14]}
c(2,1)={[]}
c(2,2)={'kolk'}
b=c(2,2)
f=c{2,2}<<
c =
2×2 cell 数组
{2×2 double} {3×2 double}
{0×0 double} {'kolk' }
b =1×1 cell 数组
{'kolk'}
f ='kolk'
2.cell()函数创建:
b=cell(2,3)
<<
b =
2×3 cell 数组
{0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}赋值分为内容和单元创建两种方法
b(1,1)={[1;2;2]}
<<
b =
2×3 cell 数组
{3×1 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}
3.用大括号直接创建并赋值:
b={[1;2;3],'ddff',[3;4;5];[4;5] [] []}
<<
b =
2×3 cell 数组
{3×1 double} {'ddff' } {3×1 double}
{2×1 double} {0×0 double} {0×0 double}数组的显示:
1、celldisp():全部整体显示单元数组的细节内容
2、cellplot():以图形方式展示
celldisp(b)
cellplot(b) 红色表示占用内存,白色相反。
二、结构数组:
普通数组和单元数组只能通过下标访问数组元素,而结构数组是元素带名字的,也可以存储不同类型的元素,元素被称为域,数组名.域名可以用来访问结构数组的具体元素值
student(1).name='bob'
student(1).sex='man'
student(1).age='25'
student(1).score=[98 99 100]
student(2).name='plimmer'
student(2).sex='man'
student(2).age='12'
student(2).score=[98]
student(3).name='liky'
student(3).sex='girl'
student(3).score=[98 99 97]<<
student =
包含以下字段的 1×3 struct 数组:
name
sex
age
score
>> student.ageans =
'25'
ans ='12'
ans =[]
>> student(2)
ans =
包含以下字段的 struct:
name: 'plimmer'
sex: 'man'
age: '12'
score: 98
struct():函数用来帮助定义一个结构数组
s = struct(field1,value1,...,fieldN,valueN)=sstruct(域名,值,域名,值,域名,值,。。。。)
student(1)=struct('name','bob','age','12','sex','man','score',[12 12 15])
student(2)=struct('name','plimmer','age','12','sex','man','score',[98 99 78])
student(3)=struct('name','liky','age','13','sex','girl','score',[98 58 99])<<
student =
包含以下字段的 1×3 struct 数组:
name
sex
age
score
>> student(3)ans =
包含以下字段的 struct:
name: 'liky'
sex: 'girl'
age: '13'
score: [98 58 99]
可以用rmfiled()函数去删除结构数组中的域名
s=rmfield(s,field)
student=rmfield(student,'age')
<<
student =
包含以下字段的 1×3 struct 数组:
name
sex
score
complex:用来生成复数
可以使用real和imag来提取一个复数的实部和虚部
字符数组和字符串单元数组:
把字符放在一对单引号内,就定义了一个一维的字符数组
b='ojhb'
>> b='ojhb'
b =
'ojhb'
用[]创建多维字符数组时,必须保证每行都具有相同的长度,可以在短的字符串后面加上空格
c=['abc';'ab ']
<<
c =
2×3 char 数组
'abc'
'ab '
strcat()函数可以实现字符串的横向连接
s1=('abc')
s2=('vbh')
s3=strcat(s1,s2)
函数句柄:提供了间接调用函数的方法
函数句柄=@函数名----@创建普通函数的句柄
函数句柄=@(输入参数)函数体---创建匿名函数的句柄
str2func函数将函数名字符串转化为函数句柄
matlabFunction函数用于将符号表达式转化为函数句柄
feval--用于计算函数
fh1=@sin
fh2=@(x)sin(x)
fh3=str2func('sin')feval(fh1,pi/2)
[feval(fh1,pi/2),feval(fh2,pi/2),feval(fh3,pi/2)]>>
ans =
1
ans =1 1 1
在主函数中返回子函数句柄:
function out=mydiff(a,b)
if (a>b)
out=fuc1(a,b)
else
out=fuc1(b,a)
end
end
function out=fuc1(a,b)
out=a-b
end>>
>> mydiff(3,5)
out =
2
out =2
ans =2
function x=plotSin(fhandle,data)
plot(data,fhandle(data))
end>>
>> t=-pi:0.01:pi;
plotSin(@sin,t)如果函数只用一次,则可以创建一个匿名函数的函数句柄进行替代:
plotsin=@(x)plot(x,sin(x))
t=-pi:0.01:pi
plotsin(t)
匿名函数是一种没有函数名、只有函数句柄的特殊函数。
gettime=@()datestr(now)
t=gettime()sqr=@(x) x.^2
b=sqr(20)axby=@(x,y) (10*x+20*y)
z=axby(1,2)>>
t =
'01-Sep-2021 19:34:34'
b =
400
z =
50
使用函数句柄arrayfun:可以实现不同函数的批量运行
fun{1}=rand(3,6)
fun{2}=magic(12)
fun{3}=ones(5,20)
counts=arrayfun(@(x) numel(x{:}),fun)>>
fun =
1×3 cell 数组
{3×6 double} {12×12 double} {5×20 double}
counts =18 144 100
>> date
ans =
'01-Sep-2021'
>> clock
ans =
1.0e+03 *
2.0210 0.0090 0.0010 0.0190 0.0420 0.0204
str=datestr(DT)
>> datestr(date)
ans =
'01-Sep-2021'
>> datestr(now)
ans =
'01-Sep-2021 19:43:58'
>> datestr(clock)
ans =
'01-Sep-2021 19:44:05'
str=datestr(DT,dateform):转换串行日期数、日期向量或日期字符串DT为指定的日期格式。一般默认0
生成随机矩阵:
randi(10,3,4)
返回一个由介于 1 和 10 之间的伪随机整数组成的 3×4 数组
r = randi(10,5):返回一个介于1和10之间的伪随机整数组成的5x5数组
a=randi([0,1],100,5):产生一个随机矩阵:大小为5*100,元素为区间【0,1】的整数
随机产生10个12位的0、1二进制序列,要求每个序列中包含7个1和5个0:
N=10
data=randerr(N,12,7)
str=dec2bin(data)
str2=reshape(str,N,12)