sub2ind函数

时间:2022-05-27 08:10:40

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之类的。