说
X = [1 2;
3 4];
c = [1 2]';
Run Code Online (Sandbox Code Playgroud)
我想找到一些方法来做我认为X(:,c)应该做的事情.把它写成for循环:
for i=1:n
res(i) = X(i, c(i));
end
% res = [1 4]
Run Code Online (Sandbox Code Playgroud)
这样做有一个单一的声明/矢量化方式吗?
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
Run Code Online (Sandbox Code Playgroud)
那么这里发生了什么?对于向量中的每个元素c,您将从原始矩阵中选择一个列X:对于第一列R,使用第一列X.对于第二列R,使用X(再次)的第一列.对于第三列R,使用X...... 的第二列,依此类推.
这样做的结果是您感兴趣的元素(定义c)位于矩阵的对角线上R.使用diag以下对角线:
>>diag(R)
ans =
1
3
6
7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |