从移位矢量matlab矢量化制作矩阵

时间:2013-10-24 08:17:06

标签: matlab vector matrix vectorization

Geetings,这是一个小问题。

我有一个向量v(大小(v)= T),一个正数P,P <1。 T nad正数N,N

M = [v(T),     v(T-1), ....., v(T-N+2),   v(T-N+1);
     v(T-1),   v(T-2), ....., v(T-N+1),   v(T-N)  ;
     v(T-2),   v(T-3), ....., v(T-N),     v(T-N-1);
        .        .       .       .           .    ;
        .        .       .       .           .    ;
     v(T-P+1), v(T-P), ....., v(T-P-N+3), v(T-P-N+2)]

认为T> P + N.

我们举个例子。

v = [1, 2, 3, 4, 5]';
P = 3;
N = 3;
M = [5, 4, 3;
     4, 3, 2;
     3, 2, 1]

我知道如何使用for循环来做到这一点,但我也认为可以通过向量化来实现 - 这里的问题是 - 我在矢量化方面不太熟练。

提示等等:))

2 个答案:

答案 0 :(得分:7)

使用Hankel矩阵:

v = [1 2 3 4 5];
T = length(v);
P = 3;
N = 3;
out = hankel(v(T:-1:T-P+1),v(T-P+1:-1:T-P-N+2));

答案 1 :(得分:3)

您可以使用bsxfun

v = [1, 2, 3, 4, 5]';
P = 3;
N = 3;
idx = bsxfun(@minus, length(v):-1:length(v)-N+1, (0:P-1)');

result  = v(idx);

这将导致

result =

     5     4     3
     4     3     2
     3     2     1