[issue20479] Efficiently support weight/frequency mappings in the statistics module
Steven D'Aprano
report at bugs.python.org
Sat Jan 19 01:30:43 EST 2019
Steven D'Aprano <steve+python at pearwood.info> added the comment:
> Is this proposal still relevant?
Yes.
As Raymond says, deciding on a good API is the hard part. Its relatively
simple to change a poor implementation for a better one, but backwards
compatibility means that changing the API is very difficult.
I would find it very helpful if somebody has time to do a survey of
other statistics libraries or languages (e.g. numpy, R, Octave, Matlab,
SAS etc) and see how they handle data with weights.
- what APIs do they provide?
- do they require weights to be positive integers, or do they
support arbitrary float weights?
- including negative weights?
(what physical meaning does a negative weight have?)
At the moment, a simple helper function seems to do the trick for
non-negative integer weights:
def flatten(items):
for item in items:
yield from item
py> data = [1, 2, 3, 4]
py> weights = [1, 4, 1, 2]
py> statistics.mean(flatten([x]*w for x, w in zip(data, weights)))
2.5
In principle, the implementation could be as simple as a single
recursive call:
def mean(data, weights=None):
if weights is not None:
return mean(flatten([x]*w for x, w in zip(data, weights)))
# base case without weights is unchanged
or perhaps it could be just a recipe in the docs.
----------
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue20479>
_______________________________________
More information about the Python-bugs-list
mailing list