在matlab中,矩陣的儲存是按列優先,sub2ind函式將矩陣中指定元素的行列下標轉換成儲存的序號,即線性索引號。下面,我們舉例子進行說明。
1 建立乙個3*4*2的矩陣
rng(0,'twister'); % initialize random number generator.
a = rand(3, 4, 2)
a(:,:,1) =
0.8147 0.9134 0.2785 0.9649
0.9058 0.6324 0.5469 0.1576
0.1270 0.0975 0.9575 0.9706
a(:,:,2) =
0.9572 0.1419 0.7922 0.0357
0.4854 0.4218 0.9595 0.8491
0.8003 0.9157 0.6557 0.9340
將元素a(2, 1, 2)的下標轉換成線性索引號
linearind = sub2ind(size(a), 2, 1, 2)
linearind =
14a(2, 1, 2) a(14)
ans = and =
0.4854 0.4854
2 針對這種三維的矩陣,如果預設第三個下標,預設為1。
linearind = sub2ind(size(a), 2, 4)
ans =
11linearind = sub2ind(size(a), 2, 4, 1)
ans =
113 假如要轉換多個元素,我們可以使用一條命令完成。例子是轉換5個元素下標為線性索引號。
sub2ind(size(a), 3, 3, 2);
sub2ind(size(a), 2, 4, 1);
sub2ind(size(a), 3, 1, 2);
sub2ind(size(a), 1, 3, 2);
sub2ind(size(a), 2, 4, 1);
sub2ind(size(a), [3 2 3 1 2], [3 4 1 3 4], [2 1 2 2 1])
ans =
21 11 15 19 11
%%[3 2 3 1 2], [3 4 1 3 4], [2 1 2 2 1] 分別代表行,列,縱向的下標。%%
[a(3,3,2), a(2,4,1), a(3,1,2), a(1,3,2), a(2,4,1)]
ans =
0.6557 0.1576 0.8003 0.7922 0.1576
a([21, 11, 15, 19, 11])
ans =
0.6557 0.1576 0.8003 0.7922 0.1576
原文:
matlab中sub2ind方法的使用
su2ind函式是對矩陣索引號檢索的函式,ans sub2ind size,i,j 其中第乙個引數size表示矩陣的行數和列數,i是轉換矩陣的行標,j是轉換矩陣的列標。i和j的行列數必須相同。最終結果ans對應i,j對應行列在整個矩陣中的索引。在命令視窗中輸入驗證 例項1 sub2ind 10 10...
ind2sub函式的使用方法
ind的意思是index,即索引值,sub的意思是subscript,即下標,2就是to的意思。所以這個函式的意思是把矩陣中某個元素的索引值轉換為下標。索引值 矩陣中某個元素的索引值就是它在矩陣中排第幾位的意思。比如 1 2 3 4 5 6 7 8 9 那麼4的索引值就是2,而其下標是 2,1 8的...
MATLAB中的ind2vec和vec2ind函式
先說容易理解的vec2ind吧,從命令名字上可以看出是 向量變索引 假設乙個3 6的稀疏矩陣t 1,0 1 0 0 1 0 t 2,1 0 1 1 0 0 t 3,0 0 0 0 0 1 通過vec2ind t 將會得到什麼?因為通過矩陣知道t是6列的,t 0 1 0 0 1 0 1 0 1 1 0...