zoukankan      html  css  js  c++  java
  • sub2ind函数

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

  • 相关阅读:
    MySQL索引
    《深度探索C++对象模型》笔记——Data语意学
    《深度探索C++对象模型》笔记——Function语意学
    近期的bug常见[从以前的零散笔记中整理]
    一个小trick
    3月9日-日记
    第一次考试_心得
    第一次考试_笔记
    哈希笔记
    Dp刷版笔记
  • 原文地址:https://www.cnblogs.com/hyb221512/p/10789059.html
Copyright © 2011-2022 走看看