2016-03-08 199 views
1

我目前有一個包含預定義值的單元陣列的向量。這些值的數目和含量應能夠改變:Matlab - 使用矩陣作爲陣列向量的索引

names = {'r1','r2','r3'}; 

此外,我有一個矩陣,即應作爲一個索引矩陣。它看起來像下面的例子,但是,它的大小也應該是可變的。

mat = [1 3 3; 2 1 3; 1 1 1]; 

投放:

1 3 3 
2 1 3 
1 1 1 

我現在想創建包含在相同的矩陣格式排列的各個值的矩陣。因此,無論mat是否包含1,輸出都應該包含名稱的第一個值,依此類推。最終的結果應該如下所示:

r1 r3 r3 
r2 r1 r3 
r1 r1 r1 

只是爲了避免誤解:名稱的內容只是作爲一個例子。後面的具體名稱應該匹配,並且不能通過簡單地添加每個索引值的前面來解決。

非常感謝您的幫助!

回答

5

這很簡單:

result = names(mat); 

唯一要注意的是,在每mat數字元件必須是整數,1和names元件的數目之間。

說明:mat作爲線性索引。線性索引時的一般規則是按照列順序從源數組中獲取值(因爲它是正常的),但形狀與索引數組的形狀相同。

後來編輯,這要歸功於Luis Mendo:除了索引數組的單例尺寸外,此規則是有效的。爲了加強對這個角落情況下,一般來說,人們可以使用稍微更復雜(也更費時)形式:

result = reshape(names(mat), size(mat)); 
+0

哇!不敢相信我沒有看到。完美的答案和感謝 – Benvaulter

+0

這對於仍然認爲索引是數字的人來說是非常有用的,但非常令人討厭[MATLAB行爲]。 – Crowley

+4

@ CST-Link _形狀與索引array_的形狀相同嗯,並非總是如此。如果'mat'是列向量而'names'是一行,'names(mat)'將是一行。所以你的'reshape'可能需要畢竟:-) –