Does any one know how to optimize this code so that it runs faster:
for i=1:iNZ; if iPointsinSlice>0; for m=1:iNX; for l=1:iNY; if SliceMaskUr(m,l)==1; DoseCubeU(m+(l-1)*iNX+i*iNX*iNY)=100*SumDose(m,l,i)/RX_Dose; end end end end end
Your help is much appreciated! Thanks a lot!
Is 'iPointsinSlice' a scalar? If so and if it is not positive, nothing will happen here.
Next, don't you mean "m+(l-1)*iNX+(i-1)*iNX*iNY" as the index to 'DoseCubeU'? As it stands it will vary from 1+iNX*iNY to iNX*iNY*iNZ+iNX*iNY. Assuming my guess is correct, do this:
if iPointsinSlice > 0 t = repmat(SliceMaskUr==1,1,1,iNZ); DoseCubeU(t) = (100/RX_Dose)*SumDose(t); end
In case 'iPointsinSlice' is not a scalar you will have to correct your code before we can see how to handle it.
Sorry! It should have been:
t = repmat(SliceMaskUr==1,[1,1,iNZ]);
This code doesn't give me the same result as my initial code. Please note that the purpose of "m+(l-1)*iNX+i*iNX*iNY" is to reshape the SumDose array which is (iNX by iNY by iNZ) to a one dimensional array (1 by iNX*iNY*iNZ).
I tried also
if SliceMaskUr==1; DoseCubeU= reshape(SumDose,1,[iNX iNY iNZ])*(100/RX_Dose); end
but it didn't work neither...
DoseCubeU = bsxfun(@times,100*SumDose/RX,SliceMaskUr==1);
s = SliceMaskUr(end:-1:1,end:-1:1); tt = cumsum(cumsum(s),2); t1 = flipud(any(tt,2)); t2 = fliplr(any(tt)); DoseCubeU = bsxfun(@times,100*SumDose(t1,t2,:)/RX_Dose,SliceMaskUr(t1,t2));