2013-10-24 4 views
2

Geetings, вот небольшая проблема.Сделать матрицу из вектора вектора вектора сдвинутого вектора

У меня есть вектор V (размер (объем) = Т), положительное число Р, Р < Т-над положительным числом 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)] 

Это справедливо, что Т> Р + Н.

Пусть дан пример.

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

Я знаю, как сделать это, используя цикл, но я также думаю, что это можно сделать с помощью vectorizations - вот проблема - я не настолько опытный в vectorizations.

Thx намеков и так далее :))

+0

Просьба отправьте свой код цикла – Dan

+0

Также в вашем примере у вас будет 'v (T-P-N)' в правом нижнем углу, который является 'v (5-3-3)' который является 'v (-1)', который не определен. Исправьте свои ограничения. Я предполагаю, что P + N Dan

+0

Sory, я видел ошибку сразу после публикации ответа. – Ell

ответ

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 
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)); 
Смежные вопросы