MATLAB矩阵下标引用
在MATLAB中,普通的二维数组元素的数字索引分为双下标索引和单下标索引。双下标索引是通过一个二元数组对来对应元素在矩阵中的行列位置,例如A(2,3)表示矩阵A中第2行第3列的元素。单下标索引的方式是采用列元素优先的原则,对m行n列的矩阵按列排序进行重组,成为一维数组,再取新的一维数组中元素优先位置对应的值作为元素在原矩阵中单下标,例如对于4✖4的矩阵,A(7)表示矩阵A中第3行第2列的元素,而A(13)表示矩阵A中第1行第4列的元素。
1、矩阵下标访问单个矩阵元素
常用的矩阵索引表达式如下所示。
索引表达式 | 函数功能 |
A(1) | 将二维矩阵A重组为一维数组,返回数组中第一个元素 |
A(:,j) | 返回二维矩阵A中第j列列向量 |
A(i,;) | 返回二维矩阵A中第i行行向量 |
A(:,j:k) | 返回由二维矩阵A中的第j列到第k列列向量组成的子矩阵 |
A(i:k,:) | 返回由二维矩阵A中的第i行到第k行行向量组成的子矩阵 |
A(i:k,j:l) | 返回由二维矩阵A中的第i行到第k行行向量和第j列到第l列列向量的交集组成的子矩阵 |
A(;) | 将矩阵A中每列合并成一个长的列向量 |
A(j:k) | 返回一个行向量,其元素为A(:)中的第j个元素到第k个元素 |
A([j1j2...]) | 返回一个行向量,其中元素为A(:)中的第j1、j2元素 |
A(;,[j1j2...]) | 返回矩阵A的第j1列、第j2列等的列向量 |
A([i1i2...]:,) | 返回矩阵A的第i1行、第i2行等的行向量 |
A([i1i2...],[j1j2...]) | 返回矩阵第i1行、第i2行等和第j1列、第j2列等的元素 |
2、线性引用矩阵元素
矩阵某一元素的单下标索引值和双下标索引值之间,可以通过MATLAB内部函数进行转换,其句法形式为:
IND = sub2ind(siz,i,j)
其功能为将双下标索引值变为单下标索引值,其中siz是一个包含两个元素的数组,代表了转换矩阵的行列数将双下标索引值转换为单下标索引值,其中siz是一个包含两个元素的数组,代表转换矩阵的行列数,一般可以直接用size(A)表示,i和j分别是双下表索引中的行、列值,IND是转换后的单下标索引值。
[I J] = ind2sub(siz,ind)
其功能为将单下标索引值转换为双下标索引值,各变量意义同上。
3、访问多个矩阵元素
设A=magic(4),如果需要计算第4列元素的和,按照前面介绍的方法可以用以下式来实现:
A(1,4)+A(2,4)+A(3,4)+A(4,4)
在下标表达式里,可以用冒号来表示矩阵的多个元素。例如,A(1:k,j)表示矩阵第j列的前k个元素。利用冒号,第四列的元素和可以更简单的表达,代码设置如下:
sum(A(1:4,4))
在MATLAB中提供了一个关键字end,用于表示该维中的最后一个元素,所以上式还可以写为:
sum(A(:,end))
实际上还可以用冒号表示非相邻的多个元素,例如下面的代码:
A=1:10
B=A(1:3:10)
由上述语句可以得到如下输出结果:
A =1 2 3 4 5 6 7 8 9 10B =1 4 7 10