Efficiency help
2 次查看(过去 30 天)
显示 更早的评论
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
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
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 个)
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 个评论
Walter Roberson
2012-1-20
In R2011b, MATLAB apparently does better on memory allocation; I do not have access to that version to experiment with.
max_ion_list{p} = []; will not help with pre-allocation, as all of max_ion_list{p} is overwritten.
Anyhow, my earlier comment to you had nothing to do with preallocation, and only had to do with the difference between the "/" operator that you coded and the "./" operator that is needed.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!