0

我有一个向量v。我需要形成一个a包含根据另一个数组指定的元素的数组b。中的每一行a(我们用 表示r)应包含 中的所有元素v,其开始和结束索引对应于 中匹配列中给出的第一个和最后一个元素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));

等等。显然。b(2,:) = b(1,:) + constant

我可以在 MATLAB 中不使用循环执行此操作吗?

4

2 回答 2

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))'
于 2013-09-30T17:53:28.840 回答
1

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

A = v(bsxfun(@plus, b(1,:).', 0:b(2,1)-b(1,1)));
于 2013-10-08T14:33:33.347 回答