矩阵元素的引用方式
矩阵元素的引用
下标必须为正数,且用圆括号括起来
A(3,2)
表示A矩阵第3行第2列的元素,如:>> A(3,2) = 200
例1.5.1:
>> A = [1,2,3;4,5,6];
>> A(4,5) = 10
A =
1 2 3 0 0
4 5 6 0 0
0 0 0 0 0
0 0 0 0 10
由此可见:如果给出的行下标或列下标大于原来矩阵的行数和列数,那么Matlab将自动扩展原来的矩阵,并将扩展后没有赋值的矩阵元素置为0。
通过序号来引用
在Matlab中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列元素,…,一直到矩阵的最后一列元素。
矩阵元素的序号就是矩阵元素在内存中的排列顺序。
例1.5.2:
>> A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> A(3)
ans =
2
由此可见:序号与下标是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)
的序号为 (j-1)×m+i。
下标与序号互换函数
矩阵元素的序号与下标可以利用sub2ind和ind2sub函数实现相互转换。
sub2ind函数
将矩阵中指定元素的行、列下标转换成存储的序号。
调用格式为:D = sub2ind(S,I,J)
,即#序号 = sub2ind(行数和列数组成的向量,转换矩阵的行下标,转换矩阵的列标)
。
其中S一般由size函数获取。
如果 I 和 J 是矩阵,表示要将矩阵中的多个元素的行列下标转换为存储的序号,那么 I 和 J 的行列数必须相同。
D为对应下标元素的序号,它的行列数与 I 和 J 相同。
例1.5.3:
>> A = [1,3;4,6]
A =
1 3
4 6
>> A = [1:3;4:6]
A =
1 2 3
4 5 6
>> D = sub2ind(size(A),[1,2;2,2],[1,1;3,2])
D =
1 2
6 4
说明在一个2×3的矩阵中,下标为(1,1), (2,1), (2,3), (2,2)的元素序号分别为1,2,6,4。
ind2sub函数
将把矩阵元素的序号转换成对应的下标。
调用格式为:[I,J] = ind2sub(S,D)
,即[行下标,列下标] = ind2sub(行数和列数组成的向量,列数)
。
例1.5.4:
>> [I,J] = ind2sub([3,3],[1,3,5])
I =
1 3 2
J =
1 1 2
说明在一个3×3的矩阵中,序号为1,3,5的元素的下标分别为(1,1), (3,1), (2,2)。
利用冒号表达式获得子矩阵
子矩阵是指由矩阵中的一部分元素构成的矩阵。
既可以用冒号表达式作为引用矩阵的下标,也可以用单个的冒号作为行下标或列下标,代表全部行或全部列。
>> A(i,:) #第i行的全部元素
>> A(:,j) #第j列的全部元素
>> A(i:i+m,k:k+m) #第i~i+m行内且在第k~k+m列中的所有元素
>> A(i:i+m,:) #第i~i+m行的全部元素
例1.5.5:
>> A = [1:5;6:10;11:15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> A(1:2,:)
ans =
1 2 3 4 5
6 7 8 9 10
>> A(2:3,1:2:5)
ans =
6 8 10
11 13 15
end运算符:表示某一维的末尾元素下标。