说
X = [1 2;
3 4];
c = [1 2]';
我想找到一些方法来做我认为X(:,c)
应该做的事情。将其编写为 for 循环:
for i=1:n
res(i) = X(i, c(i));
end
% res = [1 4]
是否有一个单一的语句/矢量化方式来做到这一点?
diag(X(:,c))
应该做的伎俩
说明:一个(稍微复杂一点的)例子将有助于理解。
>>X = [1 2; 3 4; 5 6; 7 8]
X =
1 2
3 4
5 6
7 8
>> c = [1 1 2 1];
>> R = X(:,c)
R =
1 1 2 1
3 3 4 3
5 5 6 5
7 7 8 7
那么这里发生了什么?对于 vector 中的每个元素c
,您从原始矩阵中选择一列X
:对于 的第一列R
,使用 的第一列X
。对于 的第二列R
,使用X
(再次)的第一列。对于 的第三列R
,使用X
... 的第二列,依此类推。
这样做的效果是您感兴趣的元素(在 中定义c
)位于矩阵的对角线上R
。使用以下方法获取对角线diag
:
>>diag(R)
ans =
1
3
6
7