I see. thanks!
you are (of course) right with the timing:
julia> function slicefun(x::Array{Float64,6})
z = mapslices(findmax,x,6)
end
julia> function ismaxfun(x::Array{Float64,6})
z = maximum(x,6)
ismax = x .== z
end
times as follows. more than twice as fast!
julia> @time k = ismaxfun(A)
elapsed time: 0.53359244 seconds (14418060 bytes allocated)
julia> @time k = slicefun(A)
elapsed time: 1.396534023 seconds (226762376 bytes allocated)
On Wednesday, 30 April 2014 15:25:25 UTC+1, Tim Holy wrote:
>
> There is
> maximum(A, 3)
> but I gather you also want the index? If so, mapslices is your best
> one-liner
> as of now. But if you're performance-sensitive, you might also look into
> this:
> M = maximum(A, dims)
> ismax = A .== M
> and then find the `true` elements of ismax. I'll bet that's quite a lot
> faster
> than using mapslices, even though it requires two traversals of the array.
> As
> a bonus, you'll also learn about ties.
>
> --Tim
>
> On Wednesday, April 30, 2014 04:04:47 AM Florian Oswald wrote:
> > I looked at the issue open at
> >
> > https://github.com/JuliaLang/julia/issues/3893
> >
> > but couldn't figure out what's the best thing to do. I gather that there
> > will be a
> >
> > findmax(A,dims)
> >
> > in some future version of julia? that's certainly what im looking for
> here.
> > in the meantime, is this the best I can do?
> >
> > A = randn(3,3,3)
> > mapslices(findmax,A,3)
> >
> > cheers
>