sub2ind函数是MATLAB中对矩阵索引号检索的函数,用法如下:
>> A=rand(5)
A =
0.6850 0.0867 0.2290 0.1006 0.4053
0.5979 0.7719 0.6419 0.2941 0.1048
0.7894 0.2057 0.4845 0.2374 0.1123
0.3677 0.3883 0.1518 0.5309 0.7844
0.2060 0.5518 0.7819 0.0915 0.2916
当我们输入:
>> b=sub2ind(size(A),[1 2 3],[2 3 4])
b =
6 12 18
返回值什么意思呢?即我们输入的坐标(1,2),(2,3),(3,4)在矩阵A中的索引号,意思是A矩阵第1行第2个元素的索引值号为6,为什么是6呢?因为MATLAB是按列搜索的。同理A中的第2行第3个的索引号为12,后面依次类推。
那我们如何取出A中(1,2),(2,3),(3,4)这些地方的值呢?
输入一下代码即可:
>> v=A(sub2ind(size(A),[1 2 3],[2 3 4]))
v =
0.0867 0.6419 0.2374
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ind2sub和sub2ind这对函数,是互逆的一对函数。ind2sub把数组或者矩阵的线性索引转化为相应的下标;sub2ind则正好相反,将下标转化为线性索引。
ind2sub的函数参考:
[I,J] = ind2sub(siz,IND)
[I1,I2,I3,...,In] = ind2sub(siz,IND)
sub2ind的函数参考:
linearInd = sub2ind(matrixSize, rowSub, colSub)
linearInd = sub2ind(arraySize, dim1Sub, dim2Sub, dim3Sub, ...)
上述的函数参考中,第一个都是二维的情况,第二个扩展到了多维空间。一维的数组就没必要使用这两个函数了,一维的下标本来就是线性索引。
从这个例子中我们看到,MATLAB中的数组是按照列排列的,使用的时候要注意一点。多维的使用和上述类似。
ind2sub的用法也类似
这里说明一点,ind2sub和sub2ind仅仅是下标的转换操作,实际使用中还会强扯到其他的函数,如find, size之类的。