简单的方法提取矩阵中的元素

时间:2014-04-19 06:42:34

标签: matlab

假设a =

3 2 5
0 1 6

和table =

1 2 1
1 2 2

我想提取由表索引的行的每一列中的特定元素。结果应该是

3 1 5
3 1 6

遍历每一列将花费太长时间。有没有其他方法可以实现这个目标?

2 个答案:

答案 0 :(得分:2)

您可以使用sub2ind来执行此操作,如下所示:

a(sub2ind(size(a), table, columns))

columnstable之类的矩阵,但包含列索引,如下所示:

columns =

 1 2 3
 1 2 3

您可以通过多种方式创建该矩阵。以下是一些方法:

columns = cumsum(ones(size(a)), 2)
columns = repmat(1:size(a,2), size(a, 1), 1)
columns = ones(size(a,1),1) * (1:size(a,2))

或者您可以直接在函数调用中创建该矩阵,并在一行中完成所有操作:

a(sub2ind(size(a), table, cumsum(ones(size(a)), 2)))

ans =

     3     1     5
     3     1     6

答案 1 :(得分:1)

Rafael Monteiro's answer类似:

result = a(bsxfun(@plus, table, 0:size(a,1):numel(a)-1));

由于时间紧迫,请测试在特定情况下哪种方法最快。