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

Matlab - Using matrix as an index for array vectors

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

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,输出就应该包含 names 的第一个值,依此类推。最终结果应该如下所示:

r1  r3  r3 
r2  r1  r3 
r1  r1  r1 

为避免误会:名称内容在此仅作举例说明。后面的具体名字要匹配,不是简单的在每个索引值前面加一个r就可以解决的

非常感谢您的帮助!

很简单:

result = names(mat);

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

解释: mat 作为一个 线性索引 。线性索引时的一般规则是值按列顺序从源数组中获取(这是正常的),但形状与索引数组的形状相同。

稍后编辑,感谢Luis Mendo:除了索引数组的单例维度外,此规则有效。要针对这种特殊情况执行规则,可以使用 稍微 更详细(也更耗时)的形式:

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