我有一个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);
但是,虽然它有效,但这可能是一个巨大的瓶颈,我需要加快代码才能使它有用。
我能以最快的方式获得相同的结果?
答案 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
。