假设a =
3 2 5
0 1 6
和table =
1 2 1
1 2 2
我想提取由表索引的行的每一列中的特定元素。结果应该是
3 1 5
3 1 6
遍历每一列将花费太长时间。有没有其他方法可以实现这个目标?
答案 0 :(得分:2)
您可以使用sub2ind来执行此操作,如下所示:
a(sub2ind(size(a), table, columns))
columns
是table
之类的矩阵,但包含列索引,如下所示:
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)
result = a(bsxfun(@plus, table, 0:size(a,1):numel(a)-1));
由于时间紧迫,请测试在特定情况下哪种方法最快。