sumabs2(A, dim)

On Friday, August 28, 2015 07:00:03 AM jw3126 wrote:
> Thanks guys, and sorry for my late reply! So from the answers I get, that
> there is currently no fast generic way to do this? e.g. if I want to apply
> something other then norm column wise, I write a new function from scratch?
> 
> On Wednesday, August 12, 2015 at 5:56:08 PM UTC+2, David Gold wrote:
> > Here's a way to do it with slices
> > 
> > julia> function f(mat)
> > 
> >            mat1 = slice(mat, 1, :)
> >            mat2 = slice(mat, 2, :)
> >            mat3 = slice(mat, 3, :)
> >            A = Array(Float64, size(mat, 2))
> >            for i in 1:size(mat, 2)
> >            
> >                A[i] = sqrt(mat1[i]^2 + mat2[i]^2 + mat3[i]^2)
> >            
> >            end
> >            A
> >        
> >        end
> > 
> > f (generic function with 2 methods)
> > 
> > julia> f(mat);
> > 
> > julia> @time f(mat);
> > 
> >   0.008991 seconds (15 allocations: 7.630 MB)
> > 
> > On Wednesday, August 12, 2015 at 11:09:06 AM UTC-4, jw3126 wrote:
> >> I have a matrix and I want to compute the norm of each column. I tried
> >> 
> >> using TimeIt
> >> N = 10^6
> >> mat = randn(3, N)
> >> 
> >> @timeit mapslices(norm, mat, 1)
> >> 
> >> 1 loops, best of 3:
> >> 
> >> 915.13 ms per loop
> >> 
> >> 
> >> Dog slow, 100times slower then numpy:
> >> 
> >> import numpy as np
> >> N = 10**6
> >> mat = np.random.randn(3, N)
> >> %timeit np.linalg.norm(mat, axis=0)
> >> 
> >> 
> >> 100 loops, best of 3:
> >> 9.71 ms per loop
> >> 
> >> 
> >> If I understand it correctly, the reason is that mapslices can not really
> >> optimize on the norm argument, e.g. inline norm. I had two ideas how to
> >> solve this problem, both of which are problematic:
> >> 
> >> 1) There is the NumericExtensions
> >> <https://github.com/lindahua/NumericExtensions.jl> package, which seems
> >> to be aimed at this kind of problem, however this package is deprecated,
> >> so
> >> I don't want to use it.
> >> 
> >> 2) Write some code by hand. This gives speedup, but is still  slower then
> >> numpy:
> >> 
> >> N = 10^6
> >> mat = randn(3, N)
> >> function f(mat)
> >> 
> >>     return sqrt(mat[1,:].^2 + mat[2,:].^2 + mat[3,:].^2)
> >> 
> >> end
> >> 
> >> @timeit f(mat)
> >> 
> >> 10 loops, best of 3:
> >> 
> >> 38.51 ms per loop
> >> 
> >> 
> >> So how to make this computation fast? And more generally what are ways
> >> speed up mapslices without using NumericExtensions?

Reply via email to