MATLAB 索引问题
Posted
技术标签:
【中文标题】MATLAB 索引问题【英文标题】:MATLAB indexing question 【发布时间】:2011-06-18 01:40:19 【问题描述】:我有一个矩阵,例如
A = [ 1 2 3; 4 5 6; 7 8 9] ;
和一个大小为 1x3 的向量,它指定每行中的哪个元素是我要查找的元素 - 即如果
vector = [ 1 2 1 ]
那么想要的输出是
[ 1 5 7 ]
因为1
是第 1 行中的第 1 个元素,5
是第 2 行中的第 2 个元素,7
是第 3 行中的第 1 个元素排。
我如何实现这一目标?找不到执行此操作的内置函数,这让我很惊讶。
【问题讨论】:
相关:Accessing values using subscripts without using sub2ind 【参考方案1】:这是Yochai's answer 的变体,但没有转置(这也是SUB2IND 在Amro's answer 中所做的基本操作):
output = A((1:3)+3.*(vector-1));
或者对于任意大小的数组A
:
nRows = size(A,1);
output = A((1:nRows)+nRows.*(vector-1));
【讨论】:
【参考方案2】:MATLAB 提供 SUB2IND 函数将行/列下标转换为线性索引:
>> A = [1 2 3; 4 5 6; 7 8 9];
>> idx = sub2ind(size(A),1:3,[1 2 1]); %# rows: [1 2 3], cols: [1 2 1]
>> A(idx)
1 5 7
【讨论】:
【参考方案3】:有点难看,但diag(A(1:3,[1 2 1]))
可以解决问题。
【讨论】:
我做了同样的事情:diag(A(:,vector))'【参考方案4】:首先,Matlab 中的索引是从上到下的。 所以在你的情况下 A[1] = 1 , A[2] = 4 , A[3] = 7
也就是说,在 A' 上工作会更容易,因为它更简单。
B = A';
B((vector + [0:2].* 3))
【讨论】:
来自文档:“A(:)是A的所有元素,被视为一个列。”。作为旁注,以了解索引。以上是关于MATLAB 索引问题的主要内容,如果未能解决你的问题,请参考以下文章