@@ -59,7 +59,8 @@ julia> mean!([1. 1.], v)
5959"""
6060function mean! (R:: AbstractArray , A:: AbstractArray )
6161 sum! (R, A; init= true )
62- scale! (R, max (1 , _length (R)) // _length (A))
62+ x = max (1 , _length (R)) // _length (A)
63+ R .= R .* x
6364 return R
6465end
6566
@@ -175,7 +176,8 @@ function varm!(R::AbstractArray{S}, A::AbstractArray, m::AbstractArray; correcte
175176 fill! (R, convert (S, NaN ))
176177 else
177178 rn = div (_length (A), _length (R)) - Int (corrected)
178- scale! (centralize_sumabs2! (R, A, m), 1 // rn)
179+ centralize_sumabs2! (R, A, m)
180+ R .= R .* (1 // rn)
179181 end
180182 return R
181183end
@@ -328,7 +330,7 @@ unscaled_covzm(x::AbstractVector{<:Number}) = sum(abs2, x)
328330unscaled_covzm (x:: AbstractVector ) = sum (t -> t* t' , x)
329331unscaled_covzm (x:: AbstractMatrix , vardim:: Int ) = (vardim == 1 ? _conj (x' x) : x * x' )
330332
331- unscaled_covzm (x:: AbstractVector , y:: AbstractVector ) = dot (y , x)
333+ unscaled_covzm (x:: AbstractVector , y:: AbstractVector ) = sum ( conj (y[i]) * x[i] for i in eachindex (y , x) )
332334unscaled_covzm (x:: AbstractVector , y:: AbstractMatrix , vardim:: Int ) =
333335 (vardim == 1 ? * (transpose (x), _conj (y)) : * (transpose (x), transpose (_conj (y))))
334336unscaled_covzm (x:: AbstractMatrix , y:: AbstractVector , vardim:: Int ) =
@@ -342,14 +344,20 @@ covzm(x::AbstractVector; corrected::Bool=true) = unscaled_covzm(x) / (_length(x)
342344function covzm (x:: AbstractMatrix , vardim:: Int = 1 ; corrected:: Bool = true )
343345 C = unscaled_covzm (x, vardim)
344346 T = promote_type (typeof (first (C) / 1 ), eltype (C))
345- return scale! (convert (AbstractMatrix{T}, C), 1 // (size (x, vardim) - corrected))
347+ A = convert (AbstractMatrix{T}, C)
348+ b = 1 // (size (x, vardim) - corrected)
349+ A .= A .* b
350+ return A
346351end
347352covzm (x:: AbstractVector , y:: AbstractVector ; corrected:: Bool = true ) =
348353 unscaled_covzm (x, y) / (_length (x) - Int (corrected))
349354function covzm (x:: AbstractVecOrMat , y:: AbstractVecOrMat , vardim:: Int = 1 ; corrected:: Bool = true )
350355 C = unscaled_covzm (x, y, vardim)
351356 T = promote_type (typeof (first (C) / 1 ), eltype (C))
352- return scale! (convert (AbstractArray{T}, C), 1 // (_getnobs (x, y, vardim) - corrected))
357+ A = convert (AbstractArray{T}, C)
358+ b = 1 // (_getnobs (x, y, vardim) - corrected)
359+ A .= A .* b
360+ return A
353361end
354362
355363# covm (with provided mean)
467475corzm (x:: AbstractVector{T} ) where {T} = one (real (T))
468476function corzm (x:: AbstractMatrix , vardim:: Int = 1 )
469477 c = unscaled_covzm (x, vardim)
470- return cov2cor! (c, sqrt! ( diag (c )))
478+ return cov2cor! (c, collect ( sqrt (c[i,i]) for i in 1 : min ( size (c) ... )))
471479end
472480corzm (x:: AbstractVector , y:: AbstractMatrix , vardim:: Int = 1 ) =
473481 cov2cor! (unscaled_covzm (x, y, vardim), sqrt (sum (abs2, x)), sqrt! (sum (abs2, y, vardim)))
0 commit comments