title: Random numbers with user-defined continuous probability distribution
body: <p>I would like to simulate something on the subject of photon-photon-interaction. In particular, there is Halpern scattering. Here is the German Wikipedia entry on it <a href="https://de.wikipedia.org/wiki/Halpern-Streuung" rel="nofollow noreferrer">Halpern-Streuung</a>. And there the differential cross section has an angular dependence of (3+(cos(theta))^2)^2.</p>
  <p>I would like to have a generator of random numbers between 0 and 2*Pi, which corresponds to the density function ((3+(cos(theta))^2)^2)*(1/(99*Pi/4)). So the values around 0, Pi and 2*Pi should occur a little more often than the values around Pi/2 and 3.</p>
  <p>I have already found that there is a function on how to randomly output discrete values with user-defined probability values <code>numpy.random.choice(numpy.arange(1, 7), p=[0.1, 0.05, 0.05, 0.2, 0.4, 0.2])</code>. I could work with that in an emergency, should there be nothing else. But actually I already want a continuous probability distribution here.</p>
  <p>I know that even if there is such a Python command where you can enter a mathematical distribution function, it basically only produces discrete distributions of values, since no irrational numbers with 1s and 0s can be represented. But still, such a command would be more elegant with a continuous function.</p>