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