How to speed up this code?

I'm trying to speed up a code made of several functions and, when I run the profiler, I see that the function that takes the most time is the following in this part.
n=size(Amat,2);
for k=1:size(Amat,1)
cv(k,1)= copula_Clayton(Amat(k,1:n),alpha_0);
end
Is it possible to eliminate that for loop and make the copula_Clayton func run on every row of the matrix Amat(k,1:n) automatically?

1 件のコメント

José-Luis
José-Luis 2014 年 7 月 22 日
Two things:
  1. Pre-allocate cv
  2. Re-write copula_Clayton to that it takes the whole Amat as input.
Please note that since we have no way of guessing at what copula_Clayton actually does, it is very difficult for us to suggest possible improvements.

回答 (1 件)

Azzi Abdelmalek
Azzi Abdelmalek 2014 年 7 月 22 日
編集済み: Azzi Abdelmalek 2014 年 7 月 22 日

0 投票

You can use arrayfun, but you will notice that the for loop is faster.
cv=arrayfun(@(k) copula_Clayton(Amat(k,1:n),alpha_0),(1:size(Amat,1))','un',0);

1 件のコメント

Giacomo
Giacomo 2014 年 7 月 22 日
I've already tried and I noticed it was taking longer that the loop itself.

この質問は閉じられています。

質問済み:

2014 年 7 月 22 日

閉鎖済み:

2021 年 8 月 20 日

Community Treasure Hunt

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

Start Hunting!

Translated by