Arrays Matlab-使用矩阵作为阵列向量的索引

Arrays Matlab-使用矩阵作为阵列向量的索引,arrays,matlab,matrix,indexing,allocation,Arrays,Matlab,Matrix,Indexing,Allocation,我目前有一个包含预定义值的单元格数组的向量。这些值的数量和内容应能够变化: 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

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

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 
只是为了避免误解:名称的内容只是这里的一个例子。后面的特定名称应该匹配,并且不能通过简单地在每个索引值前面添加r来解决

非常感谢你的帮助

这很简单:

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

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

稍后编辑,原因是:除索引数组的单例维度外,此规则有效。要强制执行此角落案例的规则,可以使用稍微复杂(且更耗时)的表格:

这很简单:

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

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

稍后编辑,原因是:除索引数组的单例维度外,此规则有效。要强制执行此角落案例的规则,可以使用稍微复杂(且更耗时)的表格:


哇!真不敢相信我没看到。完美的答案和感谢对于仍然认为索引是数字的人来说,这是非常有用但非常讨厌的[MATLAB行为]。@CST Link形状与索引数组的形状相同,但并不总是如此。如果
mat
是列向量,
names
是行,
names(mat)
将是行。所以你的<代码>重塑可能还是需要的:-)@Crowley我不确定我是否理解你的说法。MATLAB世界中的“索引”是一个非常有文献记载的术语:@Crowley我不会称之为“意外行为”。这是MATLAB提供的最有用的机制之一,也是该语言流行的原因之一。。。。是的,如果你读了手册,或者读了StackOverflow:)哇!真不敢相信我没看到。完美的答案和感谢对于仍然认为索引是数字的人来说,这是非常有用但非常讨厌的[MATLAB行为]。@CST Link形状与索引数组的形状相同,但并不总是如此。如果
mat
是列向量,
names
是行,
names(mat)
将是行。所以你的<代码>重塑可能还是需要的:-)@Crowley我不确定我是否理解你的说法。MATLAB世界中的“索引”是一个非常有文献记载的术语:@Crowley我不会称之为“意外行为”。这是MATLAB提供的最有用的机制之一,也是该语言流行的原因之一。。。。如果有人读了手册,或者读了StackOverflow:,那么答案是肯定的。)