Skip to content
This repository has been archived by the owner on May 4, 2019. It is now read-only.

Commit

Permalink
Remove varzm and just use varm with m=0. This reduces code duplication
Browse files Browse the repository at this point in the history
and also seems to be faster.
  • Loading branch information
andreasnoack committed Jun 9, 2016
1 parent d8999c7 commit 005f8ca
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 36 deletions.
9 changes: 1 addition & 8 deletions src/reduce.jl
Expand Up @@ -159,15 +159,8 @@ function Base.varm{T}(A::DataArray{T}, m::Number; corrected::Bool=true, skipna::
end
Base.varm{T}(A::DataArray{T}, m::NAtype; corrected::Bool=true, skipna::Bool=false) = NA

function Base.varzm{T}(A::DataArray{T}; corrected::Bool=true, skipna::Bool=false)
n = length(A)
nna = skipna ? countnz(A.na) : 0
(n == 0 || n == nna) && return convert(Base.momenttype(T), NaN)
return Base.sumabs2(A; skipna=skipna) / (n - nna - @compat(Int(corrected)))
end

function Base.var(A::DataArray; corrected::Bool=true, mean=nothing, skipna::Bool=false)
mean == 0 ? Base.varzm(A; corrected=corrected, skipna=skipna) :
mean == 0 ? Base.varm(A, 0; corrected=corrected, skipna=skipna) :
mean == nothing ? varm(A, Base.mean(A; skipna=skipna); corrected=corrected, skipna=skipna) :
isa(mean, (@compat Union{Number, NAtype})) ?
varm(A, mean; corrected=corrected, skipna=skipna) :
Expand Down
29 changes: 1 addition & 28 deletions src/reducedim.jl
Expand Up @@ -525,42 +525,15 @@ function Base.varm!(R::AbstractArray, A::DataArray, m::AbstractArray; corrected:
end
end

function Base.varzm!(R::AbstractArray, A::DataArray; corrected::Bool=true,
skipna::Bool=false, init::Bool=true)
if isempty(A)
fill!(R, convert(eltype(R), NaN))
else
init && fill!(R, zero(eltype(R)))
if skipna
C = Array(Int, size(R))
_mapreducedim_skipna_impl!(@functorize(abs2), @functorize(+), R, C, A)
if corrected
for i = 1:length(C)
@inbounds C[i] = max(C[i] - 1, 0)
end
end
broadcast!(/, R, R, C)
else
Base.sumabs2!(R, A; init=true)
broadcast!(/, R, R, div(length(A), length(R)) - @compat(Int(corrected)))
end
end
end

Base.varm{T}(A::DataArray{T}, m::AbstractArray, region; corrected::Bool=true,
skipna::Bool=false) =
Base.varm!(Base.reducedim_initarray(A, region, zero(Base.momenttype(T))), A, m;
corrected=corrected, skipna=skipna, init=false)

Base.varzm{T}(A::DataArray{T}, region::(@compat Union{Integer, AbstractArray, Tuple});
corrected::Bool=true, skipna::Bool=false) =
Base.varzm!(Base.reducedim_initarray(A, region, zero(Base.momenttype(T))), A;
corrected=corrected, skipna=skipna, init=false)

function Base.var{T}(A::DataArray{T}, region::(@compat Union{Integer, AbstractArray, Tuple});
corrected::Bool=true, mean=nothing, skipna::Bool=false)
if mean == 0
Base.varzm(A, region; corrected=corrected, skipna=skipna)
Base.varm(A, Base.reducedim_initarray(A, region, zero(Base.momenttype(T))), region; corrected=corrected, skipna=skipna)
elseif mean == nothing
if skipna
# Can reduce mean into ordinary array
Expand Down

0 comments on commit 005f8ca

Please sign in to comment.