一、元素的引用
1.通过下标引用矩阵的元素
a(2,1),表示矩阵a第2行第1列的元素。
a(2,1)=0 %将矩阵a第2行第1列的元素的值修改为0
>> a=[1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> a(2,1)=0 %将矩阵a第2行第1列的元素的值修改为0
a =
1 2 3
0 5 6
注意:如果修改的位置超出了矩阵行列的范围,则扩展矩阵,将扩展后没有被赋值的位置设置为0
>> a(4,5)=8
a =
1 2 3 0 0
0 5 6 0 0
0 0 0 0 0
0 0 0 0 8
2.通过序号来引用矩阵
matlab中,矩阵元素按列存储,先存第一列,后按列顺序存;所以矩阵元素的序号是按列排序的顺序。
>> a=[1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> a(1)
ans =
1
>> a(2)
ans =
4
>> a(3)
ans =
2
>> a(4)
ans =
5
>> a(5)
ans =
3
>> a(6)
ans =
6
序列与下标是一一对应的,以m*n矩阵为例,矩阵元素A(i,j)的序号为(j-1)*m+i
(1)sub2ind函数:
作用:通过元素的行列号,获得元素的序号。
格式:D=sub2ind(S,I,J)
D:序号
S:行数和列数组成的向量,可以用size()函数取得
I:元素行号
J:元素列号
案例1:获取单个序号
%求取a矩阵的第1行第3列的序号
>> d=sub2ind(size(a),1,3)
d =
5 %下标为5
>> a(1,3) %验证是否正确一致
ans =
3
>> a(5)
ans =
3
案例2:获取多个序号
>> x=sub2ind(size(a),[1,2;2,2],[1,1;3,2])
x =
1 2
6 4
%a(1,1) 为a(1)
%a(2,1) 为a(2)
%a(2,3) 为a(6)
%a(2,2) 为a(4)
(2)ind2sub函数:
作用:把矩阵元素序号转换成对应行列标
格式:[I,J]=ind2sub(S,D)
I:元素行标
J:元素列标
S:行数和列数组成的向量,可以用size()函数取得
D:序号
案例1:获取单个元素行列标
% 获取a(2)的行列标
>> [I,J]=ind2sub(size(a),2)
I =
2 %元素行标
J =
1 %元素列标
案例2:获取多个元素行列标
%获取a(1)、a(2)、a(3)、a(4)的行列标
>> [I,J]=ind2sub(size(a),[1,2,3,4])
I =
1 2 1 2
J =
1 1 2 2
%a(1) 为 a(1,1)
%a(2) 为 a(2,1)
%a(3) 为 a(1,2)
%a(4) 为 a(2,2)
二、利用冒号表达式获得子矩阵
子矩阵是由矩阵中的一部分元素构成的矩阵
1. A(i,:) 表示第i行的全部元素
>> a(2,:)
ans =
4 5 6
2. A(:,j) 表示第i列的全部元素
>> a(:,2)
ans =
2
5
3. A(i:i+m,k:k+m) 表示第i~i+m行内且k~k+m行内的所有元素
>> a(1:2,2:3)
ans =
2 3
5 6
4. A(i:i+m,:) 表示i~i+m行的全部元素
>> a(1:2,:)
ans =
1 2 3
4 5 6
5.A(:,j:j+k) 表示j:j+k列的全部元素
>> a(:,2:3)
ans =
2 3
5 6
6.and用法,表示么某一维的末尾元素下标
A(end,:),表示A矩阵最后一行所有元素。
>> a(end,:)
ans =
4 5 6
三、删除矩阵元素
利用空矩阵三次矩阵元素
>> x=[]
x =
[]
案例1:删除a矩阵第1和第3列
>> a(:,[1,3])=[]
a =
2
5
四、改变矩阵的形状
reshape(A,m,n),将矩阵A重新排成m*n的二维矩阵,注意元素的顺序序号不变。
%将a矩阵的两行三列变为三行两列的矩阵
>> a=[1,2,3;4,5,6];
>> reshape(a,3,2)
ans =
1 5
4 3
2 6
五、A(:) 将矩阵变为一个列向量,元素顺序序号不变
>> a(:)
ans =
1
4
2
5
3
6