On Sat, Aug 17, 2019 at 09:02:54AM +0200, Patryk Gałczyński wrote:
> Hi!
>
> Recently I encountered a situation when I needed to pick a random
> population sample but with specific distribution function - paretovariate in
> this particular case.
Let me see if I understand... you have a paretovariate distribution, and
you want to generate a sample of values from that distribution? Or
another way of putting it, you want to generate random numbers from that
distribution?
Use the random.paretovariate() function (which I see you know about).
There's no need for random.choice or other methods to be involved.
That might not be what you *want*, but that is what you seem to be
describing.
> After poking around in the random module I found out
> that none of the so-called "sequence methods" methods support custom random
> function except for random.shuffle
> I would like to propose a new optional keyword argument for all these sequence
> methods (choice, sample, choices) that will - similarly to how shuffle does
> - take a zero-argument random distribution function of the users choice.
> Because it should be a zero-argument function, it would most likely require
> to pass "configured" distribution function with lambda. I would see it
> being used like this:
>
> ```python
> import random
> random.choice([1, 2, 3], random=lambda: random.paretovariate(1.75))
> ```
The docs for shuffle say that:
The optional argument random is a 0-argument function returning
a random float in [0.0, 1.0); by default, this is the function
random().
but random.paretovariate returns a float between [1.0, ∞). By
definition, every value it produces is out of range, and there's no way
of compressing it to [0, 1) without changing the shape.
I think you need to consider more strongly what you are actually trying
to solve, go back to trying to understand the requirements before
writing the program. Because I don't think that "Choose an item from
this finite list according to an infinite distribution" is meaningful.
--
Steven
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/5SRPE5QGTXJT3VLQFQFF4QXMVWH7DS3G/
Code of Conduct: http://python.org/psf/codeofconduct/