ran*_*dom 22 python random numpy
我正在使用x = numpy.random.rand(1)0到1之间生成一个随机数.如何使它成为x > .5可能的2倍x < .5?
AZh*_*hao 27
这是一个合适的名字!
只需对输入进行一些操作即可.首先设置x在从0到的范围内1.5.
x = numpy.random.uniform(1.5)
Run Code Online (Sandbox Code Playgroud)
x有2/3可能变得更大0.5,1/3机会更小.然后如果x大于1.0,则减去.5它
if x >= 1.0:
x = x - 0.5
Run Code Online (Sandbox Code Playgroud)
Joe*_*oel 16
这对你来说太过分了,但是知道用任意概率密度函数(pdf)生成随机数的实际方法是很好的.
你可以通过继承scipy.stat.rv_continuous来做到这一点,只要你正确地做到了.您将必须具有标准化的pdf(以使其积分为1).如果你不这样做,numpy会自动为你调整范围.在这种情况下,对于x <0.5,您的pdf值为2/3,对于x> 0.5,您的pdf值为4/3,支持[0,1](支持是非零值的间隔):
import scipy.stats as spst
import numpy as np
import matplotlib.pyplot as plt
import ipdb
def pdf_shape(x, k):
if x < 0.5:
return 2/3.
elif 0.5 <= x and x < 1:
return 4/3.
else:
return 0.
class custom_pdf(spst.rv_continuous):
def _pdf(self, x, k):
return pdf_shape(x, k)
instance = custom_pdf(a=0, b=1)
samps = instance.rvs(k=1, size=10000)
plt.hist(samps, bins=20)
plt.show()
Run Code Online (Sandbox Code Playgroud)

tmp = random()
if tmp < 0.5: tmp = random()
Run Code Online (Sandbox Code Playgroud)
这是非常简单的方法
呃,我想这可能是3倍......这就是我想通过那个课程睡觉的东西
from random import random,uniform
def rand1():
tmp = random()
if tmp < 0.5:tmp = random()
return tmp
def rand2():
tmp = uniform(0,1.5)
return tmp if tmp <= 1.0 else tmp-0.5
sample1 = []
sample2 = []
for i in range(10000):
sample1.append(rand1()>=0.5)
sample2.append(rand2()>=0.5)
print sample1.count(True) #~ 75%
print sample2.count(True) #~ 66% <- desired i believe :)
Run Code Online (Sandbox Code Playgroud)