2016-03-08 155 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'可能需要毕竟:-) –