Keyword arguments can add additional overhead when calling a function and prevent its return type from being inferred properly, but the code that runs is specialized for the types of the keyword arguments, so I don't think keyword arguments alone explain this. But it looks like there is some type instability inside repeat because it creates arrays where the number of dimensions can't be inferred.
Simon On Monday, March 2, 2015 at 5:35:15 AM UTC-5, Ivar Nesje wrote: > > The speed difference is because Julia doesn't specialize for specific > types for keyword arguments, and type unstable code creates really slow > loops in Julia. > > Thanks for reporting, I'll work on a fix. > > mandag 2. mars 2015 09.09.04 UTC+1 skrev antony schutz følgende: >> >> Hi Steven, >> >> Thanks for your answer but my question is a bit different. >> I'm not asking about creating a mesh grid and how or why doing it. >> My question is more "naive": >> Why the first method is faster than the 2 with only (well written) 1 line >> command. >> >> and a more general question is: why "repeat" is slower than "repmat" , >> for example: >> >> *tic(); repmat([1:10],1000,1000); toc()* >> >> elapsed time: 0.035878247 seconds >> >> >> *tic(); **repeat([1:10],outer=[1000,1000]);** toc()* >> >> elapsed time: 1.176858309 seconds >> >> Thanks >> >> >> Le vendredi 27 février 2015 15:11:10 UTC+1, antony schutz a écrit : >>> >>> Hello, >>> >>> I have a question about the best way to implement a grid similar to a >>> mesh grid: >>> My first intuition was to do the following: >>> >>> nx = 256 >>> nb = 195 >>> >>> kx = [-nx/2:-1+nx/2] >>> >>> tic() >>> k1 = repmat(kx,1,nx) >>> k1v = vec(k1)'#/nx >>> k1m = repmat(k1v,nb,1) >>> toc() >>> # 0.0256 sec >>> >>> Then I tried in one operation the following: >>> tic() >>> ka = repeat(kx,outer=[nx,nb])'# reshape( >>> repeat(repeat(kx,inner=[nb]),outer=[nx]) ,nb,nx*nx ) >>> toc() >>> # 0.477 >>> >>> Does somebody knows why the repeat is ~20 times slower than the >>> repeat/vec/repmat >>> Is it the best way to do this ? >>> >>> Thanks in advance >>> >>> Bests. >>> >>> Antony >>> >>>
