基于第二个数组的矢量数组

时间:2013-09-30 17:01:06

标签: matlab vectorization

我有一个向量v。我需要形成一个数组a,其中包含根据另一个数组b指定的元素。 a中的每一行(我们用r表示)应该包含来自v的所有元素,其开始和结束索引对应于{{匹配列中给出的第一个和最后一个元素1}}。例如:

b

等等。显然是A(1, :) = v(b(1, 1):b(2, 1)); A(2, :) = v(b(1, 2):b(2, 2)); A(3, :) = v(b(1, 3):b(2, 3));

我可以在MATLAB中没有循环吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

N=8; P=3; M=5;
v = rand(N,1);
b = zeros(2,M);
b(1,:) = [1 2 4 5 6];
b(2,:) = b(1,:) + P - 1;
A = cell2mat(arrayfun(@(i0,i1) v(i0:i1),b(1,:),b(2,:),'UniformOutput',false))'

答案 1 :(得分:1)

您可以使用线性索引和bsxfun直接访问元素:

A = v(bsxfun(@plus, b(1,:).', 0:b(2,1)-b(1,1)));