Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 基于第二个数组的向量数组_Matlab_Vectorization - Fatal编程技术网

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
通常比两者都快:)