我有一个矩阵,例如
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
是第1行第3行中的元素。
我如何实现这一目标?无法找到内置功能来做到这一点,这让我感到惊讶。
答案 0 :(得分:8)
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
答案 1 :(得分:6)
首先,Matlab中的索引从上到下 所以在你的情况下 A [1] = 1,A [2] = 4,A [3] = 7
也就是说,使用A'会更容易,因为它有点琐碎。
B = A';
B((vector + [0:2].* 3))
答案 2 :(得分:5)
这有点难看,但是diag(A(1:3,[1 2 1]))
会做到这一点。
答案 3 :(得分:0)
以下是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));