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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM