Can I make this function faster?
이전 댓글 표시
I need the following function in a program, but it takes a lot of time to run. Does anyone know how I can make it faster? "meting" can be as large as 25000x1 cell, every cell consists of (max, mostly less) 1x2000 char.
if true
% code
function [meetwaarde,power]=databewerking(meting,multiplier,offset)
string=cell2mat(meting);
hexa=regexp(string(1,:),'\w{1,2}','match');
lengtekolom=size(meting,1);
for i=2:lengtekolom
var=regexp(string(i,:),'\w{1,2}','match');
hexa=cat(1,hexa,var);
end
meetaantal=size(meting{1},2)/2;
meetwaarde=zeros(lengtekolom,meetaantal);
deca=hex2dec(hexa);
dec=reshape(deca,lengtekolom,meetaantal);
for i=1:lengtekolom
for j=1:meetaantal
if dec(i,j)==0
meetwaarde(i,j)=0;
else
meetwaarde(i,j)=(multiplier*dec(i,j))-offset;
end
end
end
power=sum(meetwaarde,2);
end
end
Thanks a lot!!
댓글 수: 2
And what about the code above. Does that not give you an error? Anyway in MATLAB you should always have the function definition
function out = myFunction(in)
on the top. Alternally you could have subfunctions below that is called by the "main function" (the first function defined on row 1). However, you cannot call a function written earlier in the code from a row below. Also you can then only call the "main function" from another .m file.
lianne
2014년 2월 7일
채택된 답변
추가 답변 (1개)
Dina Irofti
2014년 2월 7일
0 개 추천
Have you tried parallel for loop? See parfor .
댓글 수: 1
Patrik Ek
2014년 2월 7일
Parfor seems to be a bit of overkill in this case, since it seems the most of the code could be vectorized. Also, the code takes much time to run and no matlabpools are available, eg if the code is run on the personal laptop, then you may not want to occupy all cores at the same time.
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!