Skip to content

Commit 6e3d223

Browse files
authored
Merge pull request #164 from aplavin/patch-1
propagate NaN value in median
2 parents 71ebe28 + 517afa6 commit 6e3d223

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/Statistics.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,8 @@ Like [`median`](@ref), but may overwrite the input vector.
835835
function median!(v::AbstractVector)
836836
isempty(v) && throw(ArgumentError("median of an empty array is undefined, $(repr(v))"))
837837
eltype(v)>:Missing && any(ismissing, v) && return missing
838-
any(x -> x isa Number && isnan(x), v) && return convert(eltype(v), NaN)
838+
nanix = findfirst(x -> x isa Number && isnan(x), v)
839+
isnothing(nanix) || return v[nanix]
839840
inds = axes(v, 1)
840841
n = length(inds)
841842
mid = div(first(inds)+last(inds),2)

test/runtests.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ end
5555
@test isnan(median(Any[NaN,0.0,1.0]))
5656
@test isequal(median([NaN 0.0; 1.2 4.5], dims=2), reshape([NaN; 2.85], 2, 1))
5757

58+
# the specific NaN value is propagated from the input
59+
@test median([NaN]) === NaN
60+
@test median([0.0,NaN]) === NaN
61+
@test median([0.0,NaN,NaN]) === NaN
62+
@test median([-NaN]) === -NaN
63+
@test median([0.0,-NaN]) === -NaN
64+
@test median([0.0,-NaN,-NaN]) === -NaN
65+
5866
@test ismissing(median([1, missing]))
5967
@test ismissing(median([1, 2, missing]))
6068
@test ismissing(median([NaN, 2.0, missing]))
@@ -112,6 +120,14 @@ end
112120
@test isnan(mean([0.0,NaN]))
113121
@test isnan(mean([NaN,0.0]))
114122

123+
# the specific NaN value is propagated from the input
124+
@test mean([NaN]) === NaN
125+
@test mean([0.0,NaN]) === NaN
126+
@test mean([0.0,NaN,NaN]) === NaN
127+
@test mean([-NaN]) === -NaN
128+
@test mean([0.0,-NaN]) === -NaN
129+
@test mean([0.0,-NaN,-NaN]) === -NaN
130+
115131
@test isnan(mean([0.,Inf,-Inf]))
116132
@test isnan(mean([1.,-1.,Inf,-Inf]))
117133
@test isnan(mean([-Inf,Inf]))

0 commit comments

Comments
 (0)