3

我有一个 N x 2 矩阵 A,其中包含我想从 2D 矩阵 B 中获取的元素索引,A 的每一行都是我想要获取的 B 元素的行和列索引。我想将所有这些元素堆叠为 N x 1 向量。

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

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

但是,虽然它有效,但它正在成为一个巨大的瓶颈,我需要加快代码速度以使其有用。

我可以达到相同结果的最快方法是什么?

4

2 回答 2

6

怎么样

indices = [1 N] * (A'-1) + 1;
于 2013-04-25T15:47:26.033 回答
0

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

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

B( B == 2 )

比找到满足该条件的行、列索引然后索引到B.

于 2013-04-25T15:57:22.453 回答