Skip to content

Commit 8c61c86

Browse files
committed
modified the LArray.percent() method because it may lead to negative values if the array contains integer values close to the highest integer value available
1 parent 870734c commit 8c61c86

File tree

2 files changed

+4
-5
lines changed

2 files changed

+4
-5
lines changed

larray/core/array.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3789,8 +3789,7 @@ def percent(self, *axes):
37893789
BE 40.0 60.0
37903790
FO 20.0 80.0
37913791
"""
3792-
# dividing by self.sum(*axes) * 0.01 would be faster in many cases but I suspect it loose more precision.
3793-
return self * 100 / self.sum(*axes)
3792+
return self * 100.0 / self.sum(*axes)
37943793

37953794
# aggregate method decorator
37963795
def _decorate_agg_method(npfunc, nanfunc=None, commutative=False, by_agg=False, extra_kwargs=[],

larray/tests/test_array.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2484,15 +2484,15 @@ def test_percent(array):
24842484
reg = array.sum(age, sex, regions)
24852485

24862486
percent = reg.percent()
2487-
assert_array_equal(percent, reg * 100 / reg.sum(geo, lipro))
2487+
assert_array_equal(percent, (reg * 100.0 / reg.sum(geo, lipro)))
24882488
assert percent.shape == (3, 15)
24892489

24902490
percent = reg.percent(geo)
2491-
assert_array_equal(percent, reg * 100 / reg.sum(geo))
2491+
assert_array_equal(percent, (reg * 100.0 / reg.sum(geo)))
24922492
assert percent.shape == (3, 15)
24932493

24942494
percent = reg.percent(geo, lipro)
2495-
assert_array_equal(percent, reg * 100 / reg.sum(geo, lipro))
2495+
assert_array_equal(percent, (reg * 100.0 / reg.sum(geo, lipro)))
24962496
assert percent.shape == (3, 15)
24972497
assert round(abs(percent.sum() - 100.0), 7) == 0
24982498

0 commit comments

Comments
 (0)