Gabriel - 10 months ago 74

Python Question

The

`random`

`random.gauss`

I'm looking for a way to extract a number

`N`

`python`

`def my_dist(x):`

# Some distribution, assume c1,c2,c3 and c4 are known.

f = c1*exp(-((x-c2)**c3)/c4)

return f

# Draw N random samples from my distribution between given limits a,b.

N = 1000

N_rand_samples = ran_func_sample(my_dist, a, b, N)

where

`ran_func_sample`

`a, b`

`python`

Answer

You need to use *Inverse transform sampling* method to get random values distributed according to a law you want. Using this method you can just apply *inverted function*
to random numbers having standard uniform distribution in the interval [0,1].

After you find the inverted function, you get 1000 numbers distributed according to the needed distribution this obvious way:

```
[inverted_function(random.random()) for x in range(1000)]
```

More on *Inverse Transform Sampling*:

Also, there is a good question on StackOverflow related to the topic:

Source (Stackoverflow)