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));
我目前有一个包含预定义值元胞数组的向量。这些值的数量和内容应该可以变化:
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));