%% 获取元素
clear all;
A=[3:6;7:10] %2*4
f1=A(1,3) % 第1行第3列的元素 5
f2=A(5) %第5个元素 5
%%
clear all;
A=[5:8;9:12;13:16;17:20] %4*4
f1=A(2,:) %第二行的元素
f2=A(:,2) %第二列的元素
f3=A(1:3,1:3) %前三行前三列的元素,即把第四列第四行删去
f4=A(1:end,end) %最后一列
A =
3 4 5 6
7 8 9 10
f2:矩阵是按列去存储的,因此排序顺序就是3 7 4 8 5 所以第五个元素为5
%% 单下标和双下标的转换 矩阵是按照列存储的
clear all;
A=[5:8;9:12;13:16;17:20]
ind1=sub2ind(size(A),2,3) %双下标转换成单下标
A(ind1)
A(2,3)
[I,J]=ind2sub(size(A),4) %单下标转化成双下标
ind2=sub2ind(size(A),I,J)
A =
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
sub2ind将下标转换为线性索引
ind = sub2ind(sz,row,col)
针对大小为 sz
的矩阵返回由 row
和 col
指定的行列下标的对应线性索引 ind
。此处,sz
是包含两个元素的向量,其中 sz(1)
指定行数,sz(2)
指定列数。
ind1 即寻找2行3列元素对应的序号,在这里对应为11 则answer是10(按列排)
同理[I,J]反映的是A矩阵中第四个元素对应的行列 即 [4,1]
%% 查找替换值
clear all;
A=[1:4;5:8;9:12;13:2:19] %4*4
B=A>8 %转化为BOOL值
A(A>8)=9 %对符合条件的元素赋值(大于8)
f1=find(A>2) %输出对应元素的序号
A(find(A>2))=0 %对符合条件的元素赋值(另一种表现形式,同理)
%一个是用A>8去表示的,一个是用find(A>2)(位号)去表示的
f1 =
2
3
4
6
7
8
9
10
11
12
13
14
15
16(输出为列向量)输出的为序号
%% 矩阵的合并
clear all;
A=[1:4;5:8] %2*4
B=[1:2;3:4] %2*2
C=cat(2,A,B)
D=horzcat(A,B) %水平合并
E=vertcat(A,B) %这样就不可以
矩阵合并
cat串联数组
当 A
和 B
具有兼容的大小(除运算维度 dim
以外的维度长度匹配)时,C = cat(dim,A,B)
沿维度 dim
将 B
串联到 A
的末尾。
horzcat 水平串联 horizon+cat
vercat 是竖直串联,两矩阵列数不相同,当然不可以串联
%% 矩阵的块操作 数据块的复制
clear all;
A=magic(2)
B=repmat(A,2,3)
C=repmat(A,[2,3])
magic幻方矩阵
M = magic(n)
返回由 1
到 n
2 的整数构成并且总行数和总列数相等的 n
×n
矩阵。n
的阶数必须是大于或等于 3
的标量才能创建有效的幻方矩阵。
repmat重复数组副本
B = repmat(A,n)
返回一个数组,该数组在其行维度和列维度包含 A
的 n
个副本。A
为矩阵时,B
大小为 size(A)*n
。
B = repmat(A,r1,...,rN)
指定一个标量列表 r1,..,rN
,这些标量用于描述 A
的副本在每个维度中如何排列。当 A
具有 N
维时,B
的大小为 size(A).*[r1...rN]
。例如:repmat([1 2; 3 4],2,3)
返回一个 4×6 的矩阵。
B = repmat(A,r)
使用行向量 r
指定重复方案。例如,repmat(A,[2 3])
与 repmat(A,2,3)
返回相同的结果。
A =
1 3
4 2
B =
1 3 1 3 1 3
4 2 4 2 4 2
1 3 1 3 1 3
4 2 4 2 4 2
C =
1 3 1 3 1 3
4 2 4 2 4 2
1 3 1 3 1 3
4 2 4 2 4 2
B C效果相同
%% 将多个矩阵作为对角块产生新的矩阵
clear all;
A=magic(3)
B=[1:2;3:4]
C=blkdiag(A,B)
D=blkdiag(B,A)
blkdiag分块对角矩阵
A =
8 1 6
3 5 7
4 9 2
B =
1 2
3 4
C =
8 1 6 0 0
3 5 7 0 0
4 9 2 0 0
0 0 0 1 2
0 0 0 3 4
D =
1 2 0 0 0
3 4 0 0 0
0 0 8 1 6
0 0 3 5 7
0 0 4 9 2
%% 删除矩阵中的某些元素
clear all;
A=rand(4,4)
A([1 3],:)=[] %第一行和第三行删除
A(:,end)=[] %最后一列进行删除
删除元素 赋空集即可
%% 矩阵的转置 复数不一样,会转化为共轭复数
clear all;
A=rand(2,4)
A1=A'
A2=transpose(A) %效果同上一列一样,都为转置
B=[2+3i,4+5i,3;2 4+i 5+3*i]
B1=B' %这种情况转为共轭之后,对应元素再转为共轭
B2=ctranspose(B) %效果同上 不过是ctranspose
B3=B.' %有一点不转为为共轭 普通转置
transpose, .'转置向量或矩阵
B = A.'
返回 A
的非共轭转置,即每个元素的行和列索引都会互换。如果 A
包含复数元素,则 A.'
不会影响虚部符号。例如,如果 A(3,2)
是 1+2i
且 B = A.'
,则元素 B(2,3)
也是 1+2i
。
B = transpose(A)
是执行 A.'
的另一种方式,它可以为类启用运算符重载。
A =
0.9575 0.1576 0.9572 0.8003
0.9649 0.9706 0.4854 0.1419
A1 =
0.9575 0.9649
0.1576 0.9706
0.9572 0.4854
0.8003 0.1419
A2 =
0.9575 0.9649
0.1576 0.9706
0.9572 0.4854
0.8003 0.1419
B =
2.0000 + 3.0000i 4.0000 + 5.0000i 3.0000 + 0.0000i
2.0000 + 0.0000i 4.0000 + 1.0000i 5.0000 + 3.0000i
B1 =
2.0000 - 3.0000i 2.0000 + 0.0000i
4.0000 - 5.0000i 4.0000 - 1.0000i
3.0000 + 0.0000i 5.0000 - 3.0000i
B2 =
2.0000 - 3.0000i 2.0000 + 0.0000i
4.0000 - 5.0000i 4.0000 - 1.0000i
3.0000 + 0.0000i 5.0000 - 3.0000i
B3 =
2.0000 + 3.0000i 2.0000 + 0.0000i
4.0000 + 5.0000i 4.0000 + 1.0000i
3.0000 + 0.0000i 5.0000 + 3.0000i
%% 逆时针旋转90度的K倍,默认为1倍,可以设定参数
clear all;
A=rand(2,3)
B=rot90(A) % 逆时针旋转90
C=rot90(A,2) %180
A =
0.4218 0.7922 0.6557
0.9157 0.9595 0.0357
B =
0.6557 0.0357
0.7922 0.9595
0.4218 0.9157
C =
0.0357 0.9595 0.9157
0.6557 0.7922 0.4218
%% 矩阵的翻转 左右 上下
clear all;
A=rand(2,3)
B=fliplr(A) %左右翻转
C=flipud(A) %上下翻转
D=flipdim(A,1) %指定的方向翻转 ,1相当于左右,2相当于上下
E=flipdim(A,2)
%% 矩阵尺寸的改变
clear all;
X=[1:4;5:8]
Y1=reshape(X,1,8) %%重构为1行8列的矩阵
Y2=reshape(Y1,[4,2]) %重构为4行2列的矩阵
Y3=reshape(X,size(Y2)) %重构为4行2列的矩阵 重构规则 按序号去重构
A =
0.8491 0.6787 0.7431
0.9340 0.7577 0.3922
B =
0.7431 0.6787 0.8491
0.3922 0.7577 0.9340
C =
0.9340 0.7577 0.3922
0.8491 0.6787 0.7431
D =
0.9340 0.7577 0.3922
0.8491 0.6787 0.7431
E =
0.7431 0.6787 0.8491
0.3922 0.7577 0.9340
reshape
重构数组
X =
1 2 3 4
5 6 7 8
Y1 =
1 5 2 6 3 7 4 8 以这个为例,重构为1行8列元素 ,则按X序号排列1 5 2 6 3 7 4 8
Y2 = Y3
1 3
5 7
2 4
6 8
%% 矩阵的加减 维数必须相同
clear all;
A=[1:4;5:8]
B=[2 2 2 2;4 4 4 4]
C=A-B
D=A+12
A =
1 2 3 4
5 6 7 8
B =
2 2 2 2
4 4 4 4
C =
-1 0 1 2
1 2 3 4
D =
13 14 15 16
17 18 19 20
%% 矩阵的相乘 直接相乘的矩阵的列数和另一个矩阵的行数相等才行
%%有点没有点完全不一样
clear all;
A=[1:4;5:8]
B=[2 2;2 2;2 2;2 2]
C=A*B %直接相乘 这个是矩阵相乘
D=A.*B' %点乘必须具有相同的行和列 这个是矩阵对应元素相同,所以行列必须相同
E=A*10
A =
1 2 3 4
5 6 7 8
B =
2 2
2 2
2 2
2 2
C =
20 20
52 52
D =
2 4 6 8
10 12 14 16
%% 矩阵的相除 左右 逆
clear all;
A=[1 1 1;1 1 1;1 1 1] %3*3
B=[1 1 1;2 2 2;3 3 3] %3*3
C1=A\B
C2=inv(A)*B
D1=B/A
D2=B*inv(A)
E1=A^3
E2=A*A*A
inv(A) 求逆 NAN not a number 非数
A =
1 1 1
1 1 1
1 1 1
B =
1 1 1
2 2 2
3 3 3
C1 =
NaN NaN NaN
NaN NaN NaN
Inf Inf Inf
C2 =
Inf Inf Inf
Inf Inf Inf
Inf Inf Inf
D1 =
NaN NaN NaN
NaN NaN NaN
NaN NaN NaN。
D2 =
Inf Inf Inf
Inf Inf Inf
Inf Inf Inf
E1 =E2
9 9 9
9 9 9
9 9 9
%% 矩阵的点除 左右 对应元素相除
clear all;
A=[1 1 1;1 1 1;1 1 1]
B=[1 1 1;2 2 2;3 3 3]
C1=A./B
C2=A.\B
C3=A./2
D=A.^2
A =
1 1 1
1 1 1
1 1 1
B =
1 1 1
2 2 2
3 3 3
C1 =
1.0000 1.0000 1.0000
0.5000 0.5000 0.5000
0.3333 0.3333 0.3333
C2 =
1 1 1
2 2 2
3 3 3
C3 =
0.5000 0.5000 0.5000
0.5000 0.5000 0.5000
0.5000 0.5000 0.5000
D =
1 1 1
1 1 1
1 1 1
总结:点除没看懂,用到再回来看
明白了线性索引什么意思,让抽象名词具体化