Special matrix without for loop (vectorizing loop)

Hi Guys
I am trying to improve a performance of a code which develops a special matrix. This matrix looks really simple but I couldn't find a solution to develop it without a for loop. This is a huge matrix and a for loop causes the code takes hours to run.
imagine a vector A = [ 1; 2; 3; 4; 5; 6; 7 ] I want to develop matrix B based on A. numbers are indexes not real numbers.
B = [1 2 3 4; 2 3 4 5; 3 4 5 6; 4 5 6 7 ]
your help is really appreciated.
Regards Mitch

 채택된 답변

Andrei Bobrov
Andrei Bobrov 2011년 9월 3일

1 개 추천

variant 1
B = hankel(A(1:4),A(4:end))
variant 2
B1 = cumsum([A(1:4) ones(4,3)],2)
variant 3
B2 = bsxfun(@plus,A(1:4),[0 1:3])

댓글 수: 4

M
M 2011년 9월 3일
Wow
Saved me hips of time
Thanks :)
If you think that this answer soved your problem, please accept it.
M
M 2011년 9월 5일
about variant 2 3 they are good when the numbers are integers like 1 2 3 4 5 6 ... but the numbers are just indexes of my matrix not real numbers. So I think only Hankel is working properly. I developed my code again based on Hankel and I noticed the Hankle even deteriorates the speed of code in comparison to normal for-loop code. I am talking doing the same Hankle function on a vector with 200,000 elements for 1000 times.
hankel
Hankel matrix
Syntax
H = hankel(c)
H = hankel(c,r)
in which my c has 150 elements.
Fo variants 2 and 3 then use A(B1), A(B2);

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

M
M
2011년 9월 3일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by