MATLAB:使用单行向量指定多行矩阵的哪行元素select

MATLAB: Use a single row vector to specify which row element of a multiple row matrix to select

给定一个 mxn 矩阵,例如

 M= [ 10 20 30 40; 11 12 13 14; 19 18 17 16];

和一个 1xn 'selector'

 S = [1 2 3 1];

其中 S 的所有元素都在 1..m 范围内,我想要大小为 1xn s.t 的输出向量 O。 O[1, i] = M[ S[i], i]。在这个例子中

O = [10 12 17 40];

很明显我可以使用循环来做到这一点。假设 m 和 n 以数百为单位,有没有一种比循环更具成本效益的矢量化方法?

您正在寻找 sub2ind。因此可以使用 -

实现所需的输出
O = M(sub2ind(size(M),S,1:numel(S)))

或者为了提高性能,您可以使用 sub2ind -

原始版本
O = M([0:numel(S)-1]*size(M,1) + S)