我有一个向量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中没有循环吗?
答案 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)));