Matlab 基于第二个数组的向量数组
我有一个向量Matlab 基于第二个数组的向量数组,matlab,vectorization,Matlab,Vectorization,我有一个向量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,:)+常数 我可以在MATLAB中不使用循环执行此操作吗?尝试以下操作: N=8; P=
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,:)+常数
我可以在MATLAB中不使用循环执行此操作吗?尝试以下操作:
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))'
您可以使用线性索引和bsxfun
直接访问元素:
A = v(bsxfun(@plus, b(1,:).', 0:b(2,1)-b(1,1)));
我只能考虑使用循环。如果你能将你的编码添加到问题中,这将有助于回答相关问题(可能还有一个重复问题):@user2000581你尝试过我的替代解决方案吗?不过,正如前面所讨论的,虽然循环占用更多空间,但速度更快。出于好奇,为什么需要在没有循环的情况下执行此操作?@user2000581请注意,bsxfun
通常比两者都快:)