2015-04-12 3 views
0

УчитываяСоздание этой матрицы в MATLAB

A=[a_1 a_2 a_3 ... a_n] 

Как это сделать?

[a1 ... a100] 
[a2 ... a101] 
... 
[an-100+1 ... an] 

Я хочу, чтобы не использовать for-loop здесь, так как я хочу ускорить его. Спасибо.

+0

Кажется, вы имеете дело с перестройкой здесь, так почему бы не сделать 'reshape (A, 100, []).' '? – Divakar

+0

@ Дивакар не меняется на самом деле. Между первой и второй строками перекрываются. – k99731

+0

Ах да, это так! – Divakar

ответ

4

Вы можете использовать:

n = numel(A); 
m = 100; 
I = bsxfun(@plus, 1:m, (0:n-m).'); 
B = A(I); 

Как заметка на полях: Цикл for не выполняет что плохо:

B = zeros(n-m+1, m); 
for i = 1:size(B) 
    B(i,:) = A(i:i+m-1); 
end 

Насколько мое тестирование идет, она медленнее только в 4 раза, и этот расчет вряд ли станет узким местом в вашей программе.