可能重复:
MATLAB indexing question
How to extract non-vertical column from matrix in Matlab
我觉得应该有一种简单的方法来做我想做的事,但我无法弄清楚这一点。
INPUT :n x t
矩阵M
的实数和n x 1
向量I
的索引
输出:n x 1
向量P
,P(i) = M( i, I(i) )
显然如何使用for
循环执行此操作,但这是Matlab,n
很大。有没有办法对这个问题进行矢量化并避免for
循环?
答案 0 :(得分:2)
这是一个使用线性索引的简单,快速,矢量化解决方案。
indx = (1:n)' + (I-1)*n; %'
P=M(indx);
M = randi(10,[3,4]); %# test matrix
M =
9 10 3 10
10 7 6 2
2 1 10 10
n = size(M,1);
I = [3,1,4]'; %'# index vector
indx = (1:n)' + (I-1)*n; %'
P = M(indx)
P =
3
10
10