diff --git a/src/Statistics.jl b/src/Statistics.jl index 560b227d..30c154ce 100644 --- a/src/Statistics.jl +++ b/src/Statistics.jl @@ -178,7 +178,10 @@ if !isdefined(Base, :mean) """ mean(A::AbstractArray; dims=:) = _mean(identity, A, dims) + struct _InitType end + _mean_promote(x::T, y::S) where {T,S} = convert(promote_type(T, S), y) + _mean_promote(x::_InitType, y::Any) = y/1 # ::Dims is there to force specializing on Colon (as it is a Function) function _mean(f, A::AbstractArray, dims::Dims=:) where Dims @@ -188,8 +191,7 @@ if !isdefined(Base, :mean) else n = mapreduce(i -> size(A, i), *, unique(dims); init=1) end - x1 = f(first(A)) / 1 - result = sum(x -> _mean_promote(x1, f(x)), A, dims=dims) + result = sum(x -> _mean_promote(_InitType(), f(x)), A, dims=dims) if dims === (:) return result / n else