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

时间:2014-04-14 23:29:25

标签: 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];

在每两个元素中,我选择了三个元素 一般来说,我希望在每个m元素中选择k元素。

我知道如何用循环来完成它,但是我想问一下如果没有MATLAB中的循环可以做到这一点。
提前谢谢。

4 个答案:

答案 0 :(得分:4)

m个元素选择k元素:

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

答案 1 :(得分:2)

该模式出现在汉克尔矩阵中。

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

答案 2 :(得分:0)

我想出了类似的东西,但我不确定它适用于所有情况:

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

答案 3 :(得分:0)

另一种方法:

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).'].';