@@ -59,7 +59,7 @@ julia> mean!([1. 1.], v)
5959"""
6060function mean! (R:: AbstractArray , A:: AbstractArray )
6161 sum! (R, A; init= true )
62- scale! (R, _length (R) / _length (A))
62+ scale! (R, _length (R) // max ( 1 , _length (A) ))
6363 return R
6464end
6565
@@ -175,7 +175,7 @@ function varm!(R::AbstractArray{S}, A::AbstractArray, m::AbstractArray; correcte
175175 fill! (R, convert (S, NaN ))
176176 else
177177 rn = div (_length (A), _length (R)) - Int (corrected)
178- scale! (centralize_sumabs2! (R, A, m), one (S) / rn)
178+ scale! (centralize_sumabs2! (R, A, m), 1 / / rn)
179179 end
180180 return R
181181end
@@ -335,12 +335,18 @@ unscaled_covzm(x::AbstractMatrix, y::AbstractMatrix, vardim::Int) =
335335# covzm (with centered data)
336336
337337covzm (x:: AbstractVector ; corrected:: Bool = true ) = unscaled_covzm (x) / (_length (x) - Int (corrected))
338- covzm (x:: AbstractMatrix , vardim:: Int = 1 ; corrected:: Bool = true ) =
339- scale! (unscaled_covzm (x, vardim), inv (size (x,vardim) - Int (corrected)))
338+ function covzm (x:: AbstractMatrix , vardim:: Int = 1 ; corrected:: Bool = true )
339+ C = unscaled_covzm (x, vardim)
340+ T = promote_type (typeof (first (C) / 1 ), eltype (C))
341+ return scale! (convert (AbstractMatrix{T}, C), 1 // (size (x, vardim) - corrected))
342+ end
340343covzm (x:: AbstractVector , y:: AbstractVector ; corrected:: Bool = true ) =
341344 unscaled_covzm (x, y) / (_length (x) - Int (corrected))
342- covzm (x:: AbstractVecOrMat , y:: AbstractVecOrMat , vardim:: Int = 1 ; corrected:: Bool = true ) =
343- scale! (unscaled_covzm (x, y, vardim), inv (_getnobs (x, y, vardim) - Int (corrected)))
345+ function covzm (x:: AbstractVecOrMat , y:: AbstractVecOrMat , vardim:: Int = 1 ; corrected:: Bool = true )
346+ C = unscaled_covzm (x, y, vardim)
347+ T = promote_type (typeof (first (C) / 1 ), eltype (C))
348+ return scale! (convert (AbstractArray{T}, C), 1 // (_getnobs (x, y, vardim) - corrected))
349+ end
344350
345351# covm (with provided mean)
346352
0 commit comments