Low computation efficiency of simple sentence in MATLAB

1 回表示 (過去 30 日間)
Albert
Albert 2016 年 10 月 20 日
編集済み: Thorsten 2016 年 10 月 21 日
Hi, everyone
I have an computation efficiency problem here, I wish someone could help me out.
here is part of my MATLAB code (the actual code is much bigger than the following):
lambda_new1=ones(32*32*32,1);
W1=zeros(32*32*32,t);
W2=zeros(32*32*32,t);
W3=zeros(32*32*32,t);
W4=zeros(32*32*32,t);
temp=reshape(sum(repmat(lambda_old1,1,4).*[W1(:,i),W3(:,i),W2(:,i),W4(:,i)]),2,2);
How come that the last sentence in above code is running so slow, which accounts for 35% total running time? Actually my code is much bigger than the above and there are more complicated computation, but why such a short and concise computation takes so much time?
Is there any better way to improve computation efficiency?
Also the line numbers in my MATLAB (2016a and 2016b) would disappear after a while, if I relaunch the software, the line number would come back. Is this an intrinsic bug in MATLAB? How can I fix it?
Greatly appreciate your help
Thank you
Albert Liew

採用された回答

Thorsten
Thorsten 2016 年 10 月 20 日
編集済み: Thorsten 2016 年 10 月 21 日
Instead of
X = repmat(lambda_old1,1,4).*[W1(:,i),W3(:,i),W2(:,i),W4(:,i)];
if might be faster to use
X = bsxfun(@times, [W1(:,i),W3(:,i),W2(:,i),W4(:,i)], lambda_old1);
  2 件のコメント
Albert
Albert 2016 年 10 月 20 日
Hi, Thorsten
Thank you very much for your answer. It does work much faster. The reason why is that, I guess, by using 'bsxfun', we simply circumvent the process of copying and pasting a large matrix, which is time consuming.
Thank you again.
Thorsten
Thorsten 2016 年 10 月 21 日
Exactly.

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by