这是我的任务
我有这样的矢量
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中的循环可以做到这一点。
提前谢谢。
答案 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).'].';