Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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_Matrix - Fatal编程技术网

Matlab 如何在没有循环的情况下将向量重新排序为矩阵?

Matlab 如何在没有循环的情况下将向量重新排序为矩阵?,matlab,matrix,Matlab,Matrix,这是我的任务 我有一个像这样的向量 a = [1 2 3 4 5 6 7 8 9 10 11]; 我想要一个这样的矩阵: b = [1 2 3; 3 4 5; 5 6 7; 7 8 9; 9 10 11]; 也就是说,在每两个元素中,我选择三个元素。 一般来说,我希望在每k个元素中选取m个元素 我知道如何使用循环,但我想问,是否有一种方法可以在MATLAB中不使用循环。 提前感谢。要每k个元素选择m个元素: inds = bsxfun(@plus,(1

这是我的任务

我有一个像这样的向量

a = [1 2 3 4 5 6 7 8 9 10 11];
我想要一个这样的矩阵:

b = [1 2 3;
     3 4 5;
     5 6 7;
     7 8 9;
     9 10 11];
也就是说,在每两个元素中,我选择三个元素。 一般来说,我希望在每k个元素中选取m个元素

我知道如何使用循环,但我想问,是否有一种方法可以在MATLAB中不使用循环。 提前感谢。

要每k个元素选择m个元素:

inds = bsxfun(@plus,(1:m),(0:k:(numel(a)-m)).')
a(inds)
要每k个元素拾取m个元素,请执行以下操作:

inds = bsxfun(@plus,(1:m),(0:k:(numel(a)-m)).')
a(inds)

这种模式出现在汉克尔矩阵中

ha = hankel(a');
b = ha(1:k:end-m+1, 1:m);

这种模式出现在汉克尔矩阵中

ha = hankel(a');
b = ha(1:k:end-m+1, 1:m);

我想出了类似的方法,但我不确定它是否适用于所有情况:

a(cumsum([1:m; ones(floor((numel(a) - m) / k), m) * k]))

我想出了类似的方法,但我不确定它是否适用于所有情况:

a(cumsum([1:m; ones(floor((numel(a) - m) / k), m) * k]))
另一种方法:

m = 3;
k = 2;
a = [1 2 3 4 5 6 7 8 9 10 11]; %// length should be {a multiple of k} plus m

result = reshape(a(1:floor(numel(a)/k)*k), k, []);
result = [result; result(1:m-k,2:end) a(end-m+k+1:end).'].';
另一种方法:

m = 3;
k = 2;
a = [1 2 3 4 5 6 7 8 9 10 11]; %// length should be {a multiple of k} plus m

result = reshape(a(1:floor(numel(a)/k)*k), k, []);
result = [result; result(1:m-k,2:end) a(end-m+k+1:end).'].';

我认为你的最终指数是错误的,因为你可以达到努梅拉-k+m@BenVoigt谢谢,那应该是a-m。在本例中,它没有显示错误,因为冒号不能以k步到达那里。我认为您的结束索引是错误的,因为您可以到达numela-k+m@BenVoigt谢谢,那应该是a-m。在这个例子中,它没有显示错误,因为冒号不能用k步到达那里。在这个例子中,当m=k=2时,结果应该是什么?@RafaelMonteiro我想对于这个a,它是未定义的。好问题@RafaelMonteiro问得好,这不会发生,谢谢@在这个例子中,当m=k=2时,结果应该是什么?@RafaelMonteiro我想对于这个a,它是未定义的。好问题@RafaelMonteiro好问题,这不会发生,谢谢@这是一个很好的解决方案,但要注意实际中的内存使用情况,因为ha是方形的。这是一个很好的解决方案,但要注意实际中的内存使用情况,因为ha是方形的。