> > A general question: I find the main Julia document very sparse in > description.
For example I just couldn't figure out how to use @time. @time 1+1 @time foo() @time begin for i in 1:10 ... end end I generally end up searching in the forum and most of the time I am lucky. > The forum is gracious but I do not want to often post stupid questions. There is a julia-lang tag on StackOverflow, if you prefer to use that for "how do I do X" questions. Apparently showing activity there helps us on one language ranking :) On Wed, Jan 29, 2014 at 9:12 PM, Rajan Gurjar <rjngrj2...@gmail.com> wrote: > Ok issue settled! Thanks guys, that really helped. > Actually what Jacob suggested may have already worked i.e., evaluating the > code inside the function. > > The reason I was still (i.e., despite function usage) getting long > processing time was because instead of erasing my earlier code I decide to > block comment it. I found on Google that some one suggested a way to block > comment was to use ### ###. > I was misled by it. The old code still hung around and was getting > evaluated. I had to comment each line. > > I haven't still figured out a way to block comment on Julia. Maybe it does > not exist? > > Anyway, now I actually implemented sum(sub(A...)) as Stefan suggested and > implemented a function call and timed it using @time. > > It is coming out 13.8 seconds. I should time Matlab, but I am quite > excited already! I know it comes very close. Finally a match to Matlab. > Hopefully I will remain a happy camper at Julia (still struggling with > Xubuntu installation though). How delighted I am. Thanks folks(developers) > for your great work. > > A general question: I find the main Julia document very sparse in > description. For example I just couldn't figure out how to use @time. > The standard library just gives one line definition. I generally end up > searching in the forum and most of the time I am lucky. > The forum is gracious but I do not want to often post stupid questions. > > > > On Wed, Jan 29, 2014 at 6:27 PM, Rajan Gurjar <rjngrj2...@gmail.com>wrote: > >> Stefan, >> sum(foo) did not work for me. It gave error and then I realized why. >> sum(Array) turns out to be an array of (Float64,1) while the left hand >> side is an element of an array. Therefore, I had to do another sum on that >> one element array to give me a scalar. I just could not figure out the >> error for almost an hour and then when I did >> (sum(foo)) >> it would give me a number but >> S(i,j)=sum(foo) did not and gave error (I do not recall the error but I >> think it was something like "conversion for this type not possible"!) >> Of course being fresh to Julia I did not figure this out and then I >> realized that this occurs usually in scipy too. >> But you are correct, I will change the sum(sum) provided I am able to >> figure out how to convert the array to a number. >> >> Also I tried plain summation without using sum just like your last >> section but it is was twice slower. I have that code too and >> I will recheck again to see how it differs from your last section. >> >> John, I will implement some of Stefan's suggestion and run the timing >> that you suggested. But what I am doing is very simple. I copy paste each >> section of the code (both Matlab and Julia) and run them and time them. I >> find that only that last piece which I wrote takes full 40 odd seconds. But >> I should find out which line takes up that time. >> >> Thanks >> >> >> >> >> On Wed, Jan 29, 2014 at 12:59 PM, Stefan Karpinski >> <ste...@karpinski.org>wrote: >> >>> This sum(sum(foo,2)) business is really wasteful. Just do sum(foo) to >>> take the sum of foo. It's also better to extract the dimensions into >>> individual variables. Something like this: >>> >>> function runave1(S,A,f) >>> s1, s2 = size(A) >>> p1 = f+1 >>> for n = f+1:s2-f-1, m = f+1:s1-f >>> S[m,n+1] = S[m,n] + sum(A[m-f:m+f,n+p1]) - sum(A[m-f:m+f,n-f]) >>> end >>> S >>> end >>> >>> >>> I suspect that since Matlab forces this sum(sum(X,2)) idiom on you, it >>> probably detects it and automatically does the efficient thing. It's >>> unclear to me why you need two sum operations when the slices you're taking >>> are just single columns, but maybe I'm missing something here. >>> >>> Currently, taking array slices in Julia makes a copy, which is >>> unfortunate, but in the future they will be views. In the meantime, you >>> might get better performance by explicitly using views: >>> >>> function runave2(S,A,f) >>> s1, s2 = size(A) >>> p1 = f+1 >>> for n = f+1:s2-f-1, m = f+1:s1-f >>> S[m,n+1] = S[m,n] + sum(sub(A,m-f:m+f,n+p1)) - >>> sum(sub(A,m-f:m+f,n-f)) >>> end >>> S >>> end >>> >>> >>> And, of course, there's always the nuclear option for really performance >>> critical code, which is to write out the summation manually: >>> >>> function runave3(S,A,f) >>> s1, s2 = size(A) >>> p1 = f+1 >>> for n = f+1:s2-f-1, m = f+1:s1-f >>> t = S[m,n] >>> for k = m-f:m+f; t += A[k,n+p1] - A[k,n-f]; end >>> S[m,n+1] = t >>> end >>> S >>> end >>> >>> >>> Not so elegant, but probably the fastest possible version. Ideally, once >>> array slices are views, the simpler version of the code will be essentially >>> equivalent to this. It will take some compiler cleverness, but it's >>> certainly doable. It would be interesting to hear how each of these >>> versions performs on your data. >>> >>> On Wed, Jan 29, 2014 at 12:30 PM, John Myles White < >>> johnmyleswh...@gmail.com> wrote: >>> >>>> Can you show the call to @time / @elapsed so we know exactly what's >>>> being timed? >>>> >>>> -- John >>>> >>>> On Jan 29, 2014, at 9:28 AM, Rajn <rjngrj2...@gmail.com> wrote: >>>> >>>> > Now it takes even longer i.e., ~1 minute >>>> > >>>> > Does this make sense. Also I am running this loop only once. I do not >>>> understand why writing in the function form would help. I read the manual >>>> but they suggest writing function form for something which is used many >>>> times. >>>> > I=runave(S,A,f) >>>> > showim(I); >>>> > >>>> > function runave(S,A,f) >>>> > imsz=size(A); >>>> > p1=f+1; >>>> > for n=(f+1):(imsz[2]-f-1) >>>> > for m=(f+1):(imsz[1]-f) >>>> > >>>> S[m,n+1]=S[m,n]+sum(sum(A[m-f:m+f,n+p1],2))-sum(sum(A[m-f:m+f,n-f],2)); >>>> > end >>>> > end >>>> > S; >>>> > end >>>> > >>>> > Do I have to declare function parameters to speed it up. >>>> >>>> >>> >> >