Matlab - 使用矩阵作为数组向量的索引

Ben*_*ter 1 arrays indexing matlab allocation matrix

我目前有一个包含预定义值的单元格数组的向量.这些值的数量和内容应该可以变化:

names = {'r1','r2','r3'};
Run Code Online (Sandbox Code Playgroud)

此外,我有一个矩阵,应该作为索引矩阵.但是,看起来以下示例的大小也应该是可变的.

mat = [1 3 3; 2 1 3; 1 1 1];
Run Code Online (Sandbox Code Playgroud)

交付:

 1  3  3 
 2  1  3 
 1  1  1 
Run Code Online (Sandbox Code Playgroud)

我现在想要创建一个矩阵,其中包含相同矩阵格式的数组的相应值.因此,如果mat包含1,则输出应包含名称的第一个值,依此类推.最终结果应如下所示:

r1  r3  r3 
r2  r1  r3 
r1  r1  r1 
Run Code Online (Sandbox Code Playgroud)

只是为了避免误解:名称的内容仅仅是一个例子.后来的特定名称应该匹配,并且不能通过简单地添加每个索引值的r前面来解决它.

非常感谢您的帮助!

小智 5

这很简单:

result = names(mat);
Run Code Online (Sandbox Code Playgroud)

唯一需要注意的是,每个数字元素都mat必须是整数,并且介于1和元素数之间names.

说明:mat作品作为一个线性指标.线性索引时的一般规则是,值按列顺序从源数组中获取(正常情况下),但形状与索引数组的形状相同.

稍后编辑,感谢Luis Mendo:除了索引数组的单例维度外,此规则有效.为了加强对这个角落情况下,一般来说,人们可以使用稍微更复杂(和更耗时)形式:

result = reshape(names(mat), size(mat));
Run Code Online (Sandbox Code Playgroud)

  • @CST-Link _形状与索引数组的形状相同_好吧,并非总是如此.如果`mat`是列向量而`names`是一行,`names(mat)`将是一行.所以你可能需要你的'重塑':-) (4认同)
  • @Crowley我不确定我理解你的陈述.MATLAB世界中的"索引"是一个记录良好的术语:http://www.mathworks.com/help/matlab/math/matrix-indexing.html#f1-85511 (2认同)