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 -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/5SRPE5QGTXJT3VLQFQFF4QXMVWH7DS3G/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to