我有1x10向量A
A = [11 22 33 44 55 66 77 88 99 111]
A
中的每个值代表向量B
中的索引,即1x200。
我想获取向量A
中的每个值,并转到向量B
中此值的索引,并获取此索引的值以及之前的10个项目和之后的10个项目。
例如,向量A
中的第一个元素是11,所以我将转到向量B
中的索引11并获取此索引的值(第11个值)和值的值之前的10个项目(从1到10)和之后的10个项目(从12到21),A
中的每个元素都相同。
可以没有循环吗?
答案 0 :(得分:2)
以下是使用bsxfun
R = B(bsxfun(@plus, A(:), -10:10));
现在n
中的行R
包含n
中与元素A
对应的元素。如果你想在矢量中使用它:
R = reshape(B(bsxfun(@plus, A(:), -10:10)), 1, []);
答案 1 :(得分:0)
直接的方式,循环。 你需要多快?简单的循环方法不够快吗?
C = zeros(21, length(A))
for k = 1:length(A)
C(:,k) = (-10:10)' + A(k);
end
C = C(:);
B(C) # returns the elements you seek