2.9.2 数组操作函数 【例292-1】dag与 reshape的使用演示。 a=-4:4 A=reshape(a, 3, 3) Columns 1 through 8 Column 9 443 Al=diag(al,-1) Al 010 【例292-2】数组转置、对称交换和旋转操作后果的对照比较。 A 432 ans= 3 fliud (A) ans= fliplr(A) ans= rot90(A) ans 3 【例2.9.2-3】演示 Kronecker乘法不具备“可交换规律”。 ye(2 C=reshape(1: 4,2, 2) B
8 2.9.2 数组操作函数 【例 2.9.2-1】diag 与 reshape 的使用演示。 a=-4:4 A=reshape(a,3,3) a = Columns 1 through 8 -4 -3 -2 -1 0 1 2 3 Column 9 4 A = -4 -1 2 -3 0 3 -2 1 4 a1=diag(A,1) a1 = -1 3 A1=diag(a1,-1) A1 = 0 0 0 -1 0 0 0 3 0 【例 2.9.2-2】数组转置、对称交换和旋转操作后果的对照比较。 A A = -4 -1 2 -3 0 3 -2 1 4 A.' ans = -4 -3 -2 -1 0 1 2 3 4 flipud(A) ans = -2 1 4 -3 0 3 -4 -1 2 fliplr(A) ans = 2 -1 -4 3 0 -3 4 1 -2 rot90(A) ans = 2 3 4 -1 0 1 -4 -3 -2 【例 2.9.2-3】演示 Kronecker 乘法不具备“可交换规律”。 B=eye(2) C=reshape(1:4,2,2) B =
1012 013 kron(B, C) ans 1200 340 001 0034 kron ans 1020 0102 3040 0304 2.10数组构作技法综合 【例2.10-1】数组的扩展 (1)数组的赋值扩展法 A=reshape(1: 9,3,3) 2 456 A(5,5)=111 0 12300 4560 8900 00000 111 A(:,6)=222 0 12300 45600 000 0 222 111222 (2)多次寻访扩展法 AA=A(:,[1:6,1:61) AA= 222 12300 45600 78900 0222 000 0222 0222 5600 0222 0 0222 0111222 0111 (3)合成扩展法 B=ones(2, 6)
9 1 0 0 1 C = 1 3 2 4 kron(B,C) ans = 1 3 0 0 2 4 0 0 0 0 1 3 0 0 2 4 kron(C,B) ans = 1 0 3 0 0 1 0 3 2 0 4 0 0 2 0 4 2.10 数组构作技法综合 【例 2.10-1】数组的扩展。 (1)数组的赋值扩展法 A=reshape(1:9,3,3) A = 1 4 7 2 5 8 3 6 9 A(5,5)=111 A = 1 4 7 0 0 2 5 8 0 0 3 6 9 0 0 0 0 0 0 0 0 0 0 0 111 A(:,6)=222 A = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 (2)多次寻访扩展法 AA=A(:,[1:6,1:6]) AA = 1 4 7 0 0 222 1 4 7 0 0 222 2 5 8 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 0 0 0 0 111 222 (3)合成扩展法 B=ones(2,6) B = 1 1 1 1 1 1 1 1 1 1 1 1 AB_r=[A;B]
AB r= 1230011 4560011 8900 0000011 0222 022 11122 2211 ABc=[A,B(:1:5)" AB C= 222 12300 600 000 0000 2222 11111 11111 111 【例2.10-2】提取子数组,合成新数组 A 4 0 0222 12300 5600 78900 22 222 111 AB BA=triu(A, 1)+tril(A, -1) AB BA 02300 40600 8000 00000 000 222 2222 222 AB1=[A(1:2,end:-1:1);B(1,:) AB1= 222 222 001 001 8 1 451 121 【例210-3】单下标寻访和 reshape指令演示 clear A=reshape (1: 16,, 8) 13 15 2 6 81012 14 16 reshape ans 3 5678 111 1111 3456 2 s=[136891114161 A(s)=0 0 0 0 15 0 【例2.10-4】“对列(或行)同加一个数”三种的操作方法 clear, A=reshape (1:9,3, 3) A-
10 AB_r = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 1 1 1 1 1 1 1 1 1 1 1 1 AB_c=[A,B(:,1:5)'] AB_c = 1 4 7 0 0 222 1 1 2 5 8 0 0 222 1 1 3 6 9 0 0 222 1 1 0 0 0 0 0 222 1 1 0 0 0 0 111 222 1 1 【例 2.10-2】提取子数组,合成新数组。 A A = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 AB_BA=triu(A,1)+tril(A,-1) AB_BA = 0 4 7 0 0 222 2 0 8 0 0 222 3 6 0 0 0 222 0 0 0 0 0 222 0 0 0 0 0 222 AB1=[A(1:2,end:-1:1);B(1,:)] AB1 = 222 0 0 7 4 1 222 0 0 8 5 2 1 1 1 1 1 1 【例 2.10-3】单下标寻访和 reshape 指令演示。 clear A=reshape(1:16,2,8) A = 1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16 reshape(A,4,4) ans = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 s=[1 3 6 8 9 11 14 16]; A(s)=0 A = 0 0 5 7 0 0 13 15 2 4 0 0 10 12 0 0 【例 2.10-4】“对列(或行)同加一个数”三种的操作方法。 clear,A=reshape(1:9,3,3) A =
123 789 b=[123];Ab1=A-b([111],:) 2 2 456 A b2=A-repmat(b, 3, 1) 456 Ab3=[A(:,1)-b(1),A(:,2)-b(2),A(:,3)-b(3)1 456 【例2.10-5】逻辑函数的运用示例。 randn('state, 1),R=randn (3, 6) 0.86440.8735-1.10270.1684-0.5523-0.6149 0.0942 0.4380 0.3962-1.9654 0.2546 0.8519 0.4297 0.9649 0.7443 1.1091 0.2698 L=abs(R)<o slabs(R)>1. 5 011 0 0 011 R(L)=0 R 0.8644 0.8735-1.1027 0.5523 0.6149 0 0.8519 9649-0.74431.1091 s=(find(R=O))' 0 18 R(s)=111 0.8644 0.8735 1.1027111.0000 0.5523 0.6149 111.0000111.0000111.0000111.0000 0.8197111.0000 0.8519111.0000-0.964 0.7443 1.1091111.000 [ii,jj]=find(R==111) disp (ii ),disp(33) 2 1 3 211高维数组
11 1 4 7 2 5 8 3 6 9 b=[1 2 3];A_b1=A-b([1 1 1],:) A_b1 = 0 2 4 1 3 5 2 4 6 A_b2=A-repmat(b,3,1) A_b2 = 0 2 4 1 3 5 2 4 6 A_b3=[A(:,1)-b(1),A(:,2)-b(2),A(:,3)-b(3)] A_b3 = 0 2 4 1 3 5 2 4 6 【例 2.10-5】逻辑函数的运用示例。 randn('state',1),R=randn(3,6) R = 0.8644 0.8735 -1.1027 0.1684 -0.5523 -0.6149 0.0942 -0.4380 0.3962 -1.9654 -0.8197 -0.2546 -0.8519 -0.4297 -0.9649 -0.7443 1.1091 -0.2698 L=abs(R)<0.5|abs(R)>1.5 L = 0 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 R(L)=0 R = 0.8644 0.8735 -1.1027 0 -0.5523 -0.6149 0 0 0 0 -0.8197 0 -0.8519 0 -0.9649 -0.7443 1.1091 0 s=(find(R==0))' s = 2 5 6 8 10 11 17 18 R(s)=111 R = 0.8644 0.8735 -1.1027 111.0000 -0.5523 -0.6149 111.0000 111.0000 111.0000 111.0000 -0.8197 111.0000 -0.8519 111.0000 -0.9649 -0.7443 1.1091 111.0000 [ii,jj]=find(R==111); disp(ii'),disp(jj') 2 2 3 2 1 2 2 3 1 2 2 3 4 4 6 6 2.11 高维数组
2111高维数组的创建 【例2.111-1】“全下标”元素赋值方式创建高维数组演 A(2,2,2)=1 1 B(2,5,:)=1:3 B(:;:;1) B( 00,00 B(::,3) 000 00000 00000 10203 【例2.11.1-2】低维数组合成高维数组。 c1eax,A=ones(2,3)A(:;:;2)=。nes(2,3)*2;A( 3)=。nes(2,3)*3 A(:,:,2)= 1122 22,33 3 【例211.1-3】由函数ones, zeros,rand, randn直接创建标准高维数组的示例。 rand(' state,1111),rand(2,4, 3) ans 0.62780.97480.25850.6949 0.25440.2305 0.0313 0.1223 ans 0.48890.38980 0.0587 0.91380.30710. 0.6331 ans(:;:,3) 0.28020.20730.74380.2714 0.40510.2033 0.4566 0.2421 【例2.111-4】借助cat, repmat, reshape等函数构作高维数组。 (1) cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3) ans(:;:;1) ans 11=22 2 ans ( 22,33 (2)
12 2.11.1 高维数组的创建 【例 2.11.1-1】“全下标”元素赋值方式创建高维数组演示。 A(2,2,2)=1 A(:,:,1) = 0 0 0 0 A(:,:,2) = 0 0 0 1 B(2,5,:)=1:3 B(:,:,1) = 0 0 0 0 0 0 0 0 0 1 B(:,:,2) = 0 0 0 0 0 0 0 0 0 2 B(:,:,3) = 0 0 0 0 0 0 0 0 0 3 【例 2.11.1-2】低维数组合成高维数组。 clear,A=ones(2,3);A(:,:,2)=ones(2,3)*2;A(:,:,3)=ones(2,3)*3 A(:,:,1) = 1 1 1 1 1 1 A(:,:,2) = 2 2 2 2 2 2 A(:,:,3) = 3 3 3 3 3 3 【例 2.11.1-3】由函数 ones, zeros, rand, randn 直接创建标准高维数组的示例。 rand('state',1111),rand(2,4,3) ans(:,:,1) = 0.6278 0.9748 0.2585 0.6949 0.2544 0.2305 0.0313 0.1223 ans(:,:,2) = 0.4889 0.3898 0.8489 0.0587 0.9138 0.3071 0.4260 0.6331 ans(:,:,3) = 0.2802 0.2073 0.7438 0.2714 0.4051 0.2033 0.4566 0.2421 【例 2.11.1-4】借助 cat, repmat, reshape 等函数构作高维数组。 (1) cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3) ans(:,:,1) = 1 1 1 1 1 1 ans(:,:,2) = 2 2 2 2 2 2 ans(:,:,3) = 3 3 3 3 3 3 (2)