在MATLAB中获取给定矩阵索引的元素的最快方法

时间:2013-04-25 15:46:12

标签: performance matlab vectorization

我有一个N乘2的矩阵A我希望从2D矩阵B得到的元素索引,A的每一行都是我想得到的B元素的行和列索引。我希望将所有这些元素叠加为N×1向量。

B是方阵,所以我目前正在使用

N = size(B,1);
indices = arrayfun(@(i) A(i,1) + N*(A(i,2)-1), 1:size(A,1));
result = B(indices);

但是,虽然它有效,但这可能是一个巨大的瓶颈,我需要加快代码才能使它有用。

我能以最快的方式获得相同的结果?

2 个答案:

答案 0 :(得分:6)

怎么样

indices = [1 N] * (A'-1) + 1;

答案 1 :(得分:0)

我永远不会记得B(A(:,1), A(:,2))是否按照你想要的方式工作,但我会尝试避免中间变量。如果这不起作用,请尝试subs2ind

此外,您可以首先了解如何生成A。例如,如果A来自find的输出,则使用逻辑索引会更快。即如果

B( B == 2 )

比查找满足该条件的row,col索引更快,然后索引到B