ruby-numo / numo-narray

Ruby/Numo::NArray - New NArray class library
http://ruby-numo.github.io/narray/
BSD 3-Clause "New" or "Revised" License
415 stars 41 forks source link

Median incorrect for integer types #165

Closed ankane closed 2 years ago

ankane commented 4 years ago

Hey, it looks like median always returns integers for integer types, even when the true median is not an integer.

require "numo/narray"

p Numo::NArray.cast([1.0, 2]).median # 1.5 - good
p Numo::NArray.cast([1, 2]).median   # 1 :(

Equivalent NumPy behavior

import numpy as np

print(np.median(np.array([1.0, 2]))) # 1.5 - good
print(np.median(np.array([1, 2])))   # 1.5 - good
masa16 commented 4 years ago

I followed Ruby's policy that an arithmetic operation returns same data type:

$ ruby -e 'p 3/2'
1
$ python3 -c 'print(3/2)'
1.5

But it may be better for median to return Float.

ankane commented 4 years ago

That'd be my vote fwiw. I can see it making sense for arithmetic (even though I wish Ruby behaved differently), but less so for other operations.