Efficiency help

2 ビュー (過去 30 日間)
Andy
Andy 2012 年 1 月 13 日
hi, i need some help in improving this section of code. it takes over 20 seconds to run. Because i have over 150 samples to run, a 10 second improvement would mean close to 1 hour of time saved. Thanks!
for p = 1: length(unique_cell(1,:)) for f = 1:length(ions{1,p})
max_inloop(f)= (ions{2,p}(1,f))/(ions{1,p}(1,f));
max_inloop2(f)= (ions{1,p}(1,f))/(ions{2,p}(1,f));
end
max_ion_list{p} = max_inloop;
max_ion_list2{p} = max_inloop2;
end
  1 件のコメント
Alex
Alex 2012 年 1 月 13 日
One issue you are having with speed is based off of memory, each time through the loop, MATLAb is having to re-allocate memory for a larger cell matrix. Simply defining the size of the cell before you start the loop will save a LOT of time.

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

採用された回答

Walter Roberson
Walter Roberson 2012 年 1 月 13 日
for p = 1 : length(unique_cell(1,:))
max_inloop = ions{2,p}(1,:) ./ ions{1,p}(1,:);
max_ion_list{p} = max_inloop;
max_ion_list2{p} = 1 ./ max_inloop;
end
  1 件のコメント
Andy
Andy 2012 年 1 月 13 日
thanks! works perfectly

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

その他の回答 (1 件)

Alex
Alex 2012 年 1 月 13 日
This should work. I can't test it out though. Also, note the comment I made on your main post. Always pre-allocate memory if you can. Currently, within your loop, each time, Matlab has to take time to make the matrix larger.
max_ion_list = cell(length(unique_cell(1,:)), length(ions{1,p}));
max_ion_list2 = cell(length(unique_cell(1,:)), length(ions{1,p}));
f = 1:length(ions{1,p});
for p = 1: length(uniue_cell(1,:))
max_ion_list{p} = (ions{2,p}(1,f))/(ions{1,p}(1,f));
max_ion_list2{p} = (ions{1,p}(1,f))/(ions{2,p}(1,f));
end
  5 件のコメント
Alex
Alex 2012 年 1 月 23 日
Ahh, I understand now.

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

カテゴリ

Find more on Performance and Memory in Help Center and File Exchange

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by