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 :)
Oleg Komarov
Oleg Komarov 2011 年 9 月 3 日
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.
Oleg Komarov
Oleg Komarov 2011 年 9 月 5 日
Fo variants 2 and 3 then use A(B1), A(B2);

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Community Treasure Hunt

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

Start Hunting!

Translated by