转换为线性索引似乎是一种合法的方法:
indices = tuples(:, 1) + size(a,1)*(tuples(:,2)-1);
selection = a(indices);
请注意,这也在 Matlab 内置解决方案中实现sub2ind
,如 nate'2 答案中所示:
a(sub2ind(size(a), tuples(:,1),tuples(:,2)))
然而,
a = rand(50);
tuples = [1,1; 1,4; 2,5];
start = tic;
for ii = 1:1e4
indices = tuples(:,1) + size(a,1)*(tuples(:,2)-1); end
time1 = toc(start);
start = tic;
for ii = 1:1e4
sub2ind(size(a),tuples(:,1),tuples(:,2)); end
time2 = toc(start);
round(time2/time1)
这使
ans =
38
所以虽然sub2ind
眼睛更舒服,也是~40倍slower。如果您必须经常进行此操作,请选择上面的方法。否则,使用sub2ind
以提高可读性。