第二章 数值数组及其运算中 国 民 航 大 学 电 子 信 息 工 程 学 院本讲提纲
数组操作函数
数组构技法综合
高维数组
“非数”和“空”数组
关系操作和逻辑操作中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.8 数组操作函数
diag 提取数组的对角线元素
V=diag(A)
设 A为 m× n数组,diag(A)函数用于提取数组 A主对角线元素,产生一 个具有 min(m,n)个元素的列向量。
V=diag(A,k)
其功能是提取第 k条对角线的元素。
例,a=1:9;
b=reshape(9,3,3),
c=diag(b),
d=diag(c),
e=diag(b,2),
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.8 数组操作函数
有关数组维数的指令
ndims(A) 测量数组 A的维数
size(A) 测量数组 A的大小
Length(A) 测量数组 A的长度 =max(size(A))
例 a=1:10
b=reshape(2,5)
c=ndims(b);
e=size(b);
f=length(b);
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.8 数组操作函数
数组置换指令
flipud 数组元素上下对称交换
fliplr 数组元素左右对称交换
rot90 数组 90度旋转
rot90(A) 数组逆时针旋转 90度
rot90(A,k) 数组按 k*90度旋转,k为整数
flipdim 数组按维对称交换
flipdim (A,dim)
dim=1 按行对称交换
dim=2 按列对称交换例 a=1:9,b=reshape(a,3,3)
c=flipud(b),e=fliplr(b),d=rot90(b),f=flipdim(b,2)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.8 数组操作函数
repmat 把数组按指定的“行数、列数”铺放成大数组。
repmat( A,M,N)
A是要复制的数组把数组 A复制成 M行 N列例
A=ones(2,2)
B=repmat(A,2,3)
B=
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
repmat(A,[M,N,P…])
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.8 数组操作函数
reshape 数组 size变化指令
reshape (A,m,n)
设 A为 p*q阶数组把数组 A重新排列成 m*n阶数组,并满足 m*n=p*q
也可扩展为高维数组的情况实现过程,
先把数组 A排成列矢量,然后再重新排成 m*n阶矢量例
a=randn(3,4);
b=reshape(a,2,6);
kron 满足 kronecker积规则
kron(A,B)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.9 数组构技法综合
例 1 数组的扩展
A=reshape(1:9,3,3)
A(5,5)=111 %扩展为 5*5数组
A(:,6)=222 %扩展为 5*6数组,并把第 6列所有的元素赋值为 222
AA=A(:,[1:6,1:6]) %repmat(A,1,2)
B=ones(2,6)
AB_r=[A;B] %按行扩展
AB_c=[A,B(:,1:5)’ ] % 按列扩展练习:
A=(reshape(1:9,3,3))’
B=A([2 1],[3,2])
C=reshape(A(end-3:end),2,2)
D=[B,C]
E=[ B;C’]
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.9 数组构技法综合
例 2
A=reshape(1:16,2,8);
B=reshape(A,4,4)
s=[1 3 6 8 9]
A(s)=0
例 3
randn(‘state’,1),R=randn(3,6)
L=abs(R)<0.5|abs(R)>1.5
R(L)=0 %逻辑 1对应的元素赋 0
s=find(R==0)’ % 利用 find获得符合关系等式条件的元素“单下标”
R(s)=111
[i,j]=find(R==111); %利用 find获得符合关系等式条件的元素“双下标”
disp(‘ i j’),disp([ i,j])
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.10 高维数组
高维数组的 Matlab表示例 A为 2*2*3的三维数组,那么 A可表示为
A(:,:,1),A(:,:,2),A(:,:,3)
高维数组的创建
,全下标,赋值方式例 A(2,2,2)=1
%单元素赋值创建( 2*2*2)数组,其中 A的第二页第二行第二列元素为 1,其他元素均为 0
B(2,5,:)=1:3
%子数组赋值创建( 2*5*3)数组第一页的第二行第五列元素为 1
第二页的第二行第五列元素为 2
第三页的第二行第五列元素为 3
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.10 高维数组
低维数组合成高维数组
例 A=ones(2,3)
A(:,:,2)=ones(2,3)*2
A(:,:,3)=ones(2,3)*3
由标准数组函数创建高维数组
rand(‘ state’,222),rand(2,4,3)
ones(2,4,3)
randn(2,4,3)
zeros(2,4,3)
cat,repmat,reshape等函数构建高维数组
cat(dim,A,B,? ) 按某维串接数组
dim 串接方向的维号
cat(1,A,B)=[A;B] cat(2,A,B)=[A,B]
cat(3,ones(2,3),ones(2,3)*2,randn(2,3))
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.10 高维数组
repmat
例 repmat(randn(2,2),[2,2,3])
%行维和列维方向各铺二块页维方向铺三块
reshape
例 reshape(1:12,2,3,2)
高维数组的维数标识例 A=reshape(1:24,3,4,2)
B=ndims(A)
C=size(A)
D=length(A)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.10 高维数组
高维数组的索引与二维数组一样,多维数组可以通过索引进行访问设 A为 3*3*3的数组
全下标索引
B=A(3,2,1) %把数组 A的第一页的第三行第二列的元素赋给 B
向量索引
B=A(1,[2,3],2) %把数组 A的第二页第一行的第二、三列元素赋给 B
B=A(2,1:3,3) %把数组 A的第三页第二行的第一到第三列元素赋给 B

A=rand(2,3,3)
B=A(1,2,2)
C=A(2,1:2,3)
D=A(:,2,2)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.10 高维数组
高维数组操作函数和标准数组生成函数
randn 产生正态分布的随机数组
rand 产生均匀分布随机数组
zeros 产生全 0数组
ones 产生全 1数组
cat 把,大小,相同的数组,按指定维方向串接
reshape 在元素总数不变的前提下,改变数组的 size
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.10 高维数组
permute 多维数组的排列 广义非共轭转置
ipermute 逆排列操作
B=permute(A,[m,n,p,..])
将 A按 m*n*p*? 的维数进行排列,但每一维的个数必须与 A原来的维数一一对应例若 A为 1*2*3的数组,则 m,n,p只能分别取 1,2,3
即 B的大小只能是 2*1*3,2*3*1,3*1*2,3*2*1,1*3*2
例 A=rand(1,2,3)
B=permute(A,[2,1,3])
C=ipermute(A,[2,1,3])
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.10 高维数组
squeeze 撤消长度为 1的孤维若 A为 1*2*3*1的数组
B=squeeze(A)
为 2*3数组,元素与 A相同例 A=reshape(1:18,2,3,3)
B=cat(4,A(:,:,1),A(:,:,2),A(:,:,3)
C=squeeze(B),D=size(B),E=size(C),
中 国 民 航 大 学 电 子 信 息 工 程 学 院
shiftdim
删除多维数组最前面的单一维
[B,n]=shiftdim(A)
改变数组维的结构
B=shiftdim(A,n)
n为正整数时,表示将数组的维数序列最左端的元素调到序列的最右端,共调整 n次
n为负整数时,表示将数组的维数序列一次向右移动,并在最前面添加单一维,也是调整 n次例 A=randn(1,4,3,2)
[B,n]=shiftdim(A),C=shiftdim(B,-n),D=shiftdim(B,2),
E=size(C),F=size(D)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.11,非数”和“空数组”
非数 NaN
IEEE 规定 0/0,∞/ ∞,0* ∞等运算会产生非数非数的性质:
传递性 nan参与运算所得的结果也是 nan
无,大小,概念,不能比较两个非数的大小非数的功能:
真实记述 0/0,∞/ ∞,0* ∞的运算结果
避免因 0/0,∞/ ∞,0* ∞而导致的程序中断
在数据可视化中用来裁剪图形例 非数的产生
a=0*0,b=0*log(0),c=inf-inf
非数的传递性
0*a,sin(a)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.11,非数”和“空”数组
非数的属性判断
class(a)
isnan(a)
非数元素的寻访
rand(‘state’,0)
R=rand(2,5);R(1,5)=nan,R(2,3)=nan
isnan(R)
ind=find(isnan(R))
[i,j]=ind2sub(size(R),ind)
disp(‘i j’),disp([i j])
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.11,非数”和“空数组”
空数组某维长度为 0,或若干维长度均为 0的数组空数组的功能
无空数组参与运算时,计算结果为空,可以解释为,所得结果的含义,
利用空数组对其他非空数组复制,可以改变数组的大小,但不能改变数组的维数对空数组的说明
空数组不等于全零数组
空数组是实际存在的,可用 who,whos等指令以及工作空间浏览器验证它的存在
Isempty是唯一一个判断数组是否为空数组的指令
和,非数,不同,空数组不具有传递性中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.11,非数”和“空数组”
空数组的创建
a=[],b=ones(2,0),c=rand(2,3,0,4)
空数组的属性
class(a),isnumeric(a),isempty(a),
which(a),ndim(a),size(a)
空数组用于子数组的删除和大数组的大小收缩
A=reshape(-4:5,2,5)
A(:,[2,4])=[]
size(A)
ndims(A)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.12 关系操作和逻辑操作关系运算
MATLAB提供了 6种关系运算符:
<(小于 ),<=(小于或等于 ),>(大于 )、
>=(大于或等于 ),==(等于 )、~ =(不等于 )。它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.12 关系操作和逻辑操作关系运算符的运算法则为,
(1) 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为 1,否则为 0。
(2) 当参与比较的量是两个维数相同的数组时,比较是对两数组相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原数组相同的数组,
它的元素由 0或 1组成。
(3) 当参与比较的一个是标量,而另一个是数组时,则把标量与数组的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由 0或 1组成。
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.12 关系操作和逻辑操作
逻辑运算
MATLAB提供了 3种逻辑运算符,&(与 ),|(或 )和~
(非 )。
逻辑运算的运算法则为:
(1) 在逻辑运算中,确认非零元素为真,用 1表示,
零元素为假,用 0表示。
(2) 设参与逻辑运算的是两个标量 a和 b,那么,
a&b a,b全为非零时,运算结果为 1,否则为 0。
a|b a,b中只要有一个非零,运算结果为 1。
~ a 当 a是零时,运算结果为 1;当 a非零时,运算结果为 0。
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.12 关系操作和逻辑操作
(3) 若参与逻辑运算的是两个同维数组,那么运算将对数组相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原数组同维的数组,其元素由 1或 0组成。
(4) 若参与逻辑运算的一个是标量,一个是数组,那么运算将在标量与数组中的每个元素之间按标量规则逐个进行。最终运算结果是一个与数组同维的数组,其元素由 1或 0组成。
(5) 逻辑非是单目运算符。
(6) 在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.12 关系操作和逻辑操作例 产生 5阶随机数组 A,其元素为 [10,90]区间的随机整数,然后判断 A的元素是否能被 3整除。
(1) 生成 5阶随机方阵 A。
A=fix((90-10+1)*rand(5)+10)
(2) 判断 A的元素是否可以被 3整除。
P=rem(A,3)==0
其中,rem(A,3)是矩阵 A的每个元素除以 3的余数矩阵。此时,0
被扩展为与 A同维数的零矩阵,P是进行等于 (==)比较的结果矩阵 。
例 A=1:9,B=10-A,
r0=(A<4),
r1=(A==B)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.12 关系操作和逻辑操作例 建立矩阵 A,然后找出大于 4的元素的位置。
(1) 建立矩阵 A。
A=[4,-65,-54,0,6;56,0,67,-45,0]
(2) 找出大于 4的元素的位置。
find(A>4)
例 A=1:9,L1=~(A>5),
L2=(A>3)&(A<7)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.13 关系逻辑函数
关系逻辑函数
all(A) 当向量中的元素全非 0时,结果才是 1,否则为 0
any(A)当向量中的元素有非 0时,结果是 1,否则为 0
Isequal(A,B) A,B对应元素相等时,相应元素位置取 1,否则为 0
xor(A,B) 异或操作
特殊数据判断指令
isempty(A),空数组判断指令
isfinite(A),有限大小的元素判断指令
isinf(A):无穷大小的元素判断指令
isletter(A):英文字母判断指令
isnan(A),非数判断指令
isprime(A):质数判断指令
isreal(A):实数判断指令
isspace(A):空格判断指令中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.13 关系逻辑函数
数据类型判断指令
iscell 元胞数组判断指令
iscellstr 字符串组成的圆胞数组判断指令
ischar 字符串数组判断指令
islogical 逻辑数判断指令
isnumeric 数值判断指令