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)
给定一个 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)