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

Posted

技术标签:

【中文标题】Matlab - 使用矩阵作为数组向量的索引【英文标题】:Matlab - Using matrix as an index for array vectors 【发布时间】:2016-06-22 18:13:27 【问题描述】:

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

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来解决。

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

这很简单:

result = names(mat);

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

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

稍后编辑,感谢Luis Mendo:此规则有效,除了索引数组的单例维度。为了对这种极端情况强制执行规则,可以使用稍微更复杂(也更耗时)的形式:

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

【讨论】:

哇!不敢相信我没有看到。完美的答案,谢谢 这对于仍然认为索引是数字的人来说非常有用但非常讨厌 [MATLAB 行为]。 @CST-Link 形状与索引数组的形状相同 嗯,并非总是如此。如果mat 是列向量,names 是行,则names(mat) 将是一行。所以你的reshape毕竟可能需要:-) @Crowley 我不确定我是否理解你的说法。 MATLAB 世界中的“索引”是一个有据可查的术语:mathworks.com/help/matlab/math/matrix-indexing.html#f1-85511 @Crowley 我不会称其为“意外行为”。它是 MATLAB 必须提供的最有用的机制之一,也是该语言流行的原因之一……如果您阅读手册或阅读 *** 的话,是的:)

以上是关于Matlab - 使用矩阵作为数组向量的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何通过C ++中的数据获得向量的索引

MATLAB中向量数组的向量范数

MEX 文件中 Matlab 矩阵的线性索引

MATLAB - 将向量转换为矩阵

MATLAB中如何用for 循环将结果代入矩阵中?

是否有一个函数从matlab中的索引向量制作邻接矩阵?