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 - 使用矩阵作为数组向量的索引的主要内容,如果未能解决你的问题,请参考以下文章