假設我有一個名爲A的矩陣。 矩陣的值代表座標, 因此第2行和第3列是2D平面中的座標(2,3)。在MATLAB中映射矩陣的值
我怎麼能矩陣的不同指數的所有值映射,使(0,0)
將得到的0等映射值?
(0,0) -> 0
(0,1) -> 1
(0,2) ->2
..
..
等等。
謝謝。
假設我有一個名爲A的矩陣。 矩陣的值代表座標, 因此第2行和第3列是2D平面中的座標(2,3)。在MATLAB中映射矩陣的值
我怎麼能矩陣的不同指數的所有值映射,使(0,0)
將得到的0等映射值?
(0,0) -> 0
(0,1) -> 1
(0,2) ->2
..
..
等等。
謝謝。
假設你是好與從1開始的MATLAB索引,這樣的工作 -
A1 = reshape([1:numel(A)],size(A,1),[])'
如果你想從0
開始的映射,只是減去1
-
A1 = reshape([1:numel(A)],size(A,1),[])' -1
「
sub2ind
命令確定對應於一組下標值的等效單索引」。
例如,如果
i = sub2ind(size(A), 2, 3);
然後
A(2,3)
A(i)
和指代相同的元件以矩陣A
。
在MATLAB中,你可以index matrices linearly。假設有矩陣:現在
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
,可以在(3,2)
位置訪問該元素或者使用正常標,或使用線性等效。
a(3,2)
ans = 7
a(7)
ans = 7
假設你有你的指數從1到numel(a)
名單,並不真正需要(3,2)
和(7)
之間的聯繫,這將是做到這一點的最簡單方法。
正如您所述,您希望位置(0,0)
中的元素具有索引(0)
。由於MATLAB索引開始於1
你有兩種選擇:
如果你得到一個列表(例如從另一個程序),其中的元素是從零列出(numel(a) - 1)
,如ind = [0, 3, 6, 8]
,我的建議是你根本ind = ind + 1
(或ind_1 = ind + 1
如果你不想覆蓋原來的矢量
否則,你可以每次添加一個這樣說:x = a(ind + 1);
但是,如果你真的想(3,2)
和(7)
之間的紐帶,我相信sub2ind
是要走的路。
MATLAB沒有'0'作爲索引。 – Divakar