随机数、小数位
Random numbers, small decimals
我在 python 中使用随机数,问题如下;
我有一个变量,我们可以称它为“x”,我希望它取 [10^-6,10^-1] 之间的值,然后我有以下行
x=np.random.uniform[1e-6,1e-1]
但它只生成像
这样的数字
0.123123 0.524234 0.0453454 0.9083405
它永远不会生成像
这样的数字
0.0002342 0.00002434 0.313123 0.000004234 0.034234
如何生成第二种随机数?生成大小为 1e-1,1e-2,1e-3,1e-4,1e-5,1e-6
?
的随机数
我不确定您是否以正确的方式调用函数,但您可以使用其他自定义函数,例如:
import numpy as np
def myRandomUniform(max_value, min_value):
return (max_value - min_value)*np.random.uniform() + min_value
max_value = 1e-1
min_value = 1e-6
x = myRandomUniform(max_value, min_value)
编辑:
我制作了一个直方图 1.000.000 随机数,看起来它正在生成您想要的小值。
Histogram using random function
我可能找到了一个更好的方法,如果我们制作 np.random.uniform(1e-6,1e-1)
的直方图,一开始它当然会非常均匀,但这里的重点是制作 log10 的直方图数据,即
data=[np.log10(np.random.uniform(1e-6,1e-1))for _ in range(100000)]
plt.hist(data)
它会给我们
https://i.stack.imgur.com/rgMKQ.png
这显然是不统一的。然后我定义了下面的函数
def ram(Min):
x=np.random.choice([Min,Min*1e1,Min*1e2,Min*1e3,Min*1e4])
r=np.random.uniform(0.01*x,10.1*x)
return(r)
如果我们做直方图,
data = [np.log10(ram(1e-6)) for _ in range(100000)]
plt.hist(data)
它会给我们,
https://i.stack.imgur.com/jxpeQ.png
这显然在1e-6 and 1e-1
之间更均匀。
现在的目标是改进该功能。
这是直方图之间的比较。
https://i.stack.imgur.com/SXPWk.png
您似乎在寻找对数分布的数据,其中统计的日志是均匀分布的。知道这一点,您可以轻松构造这些数字:
import numpy as np
exponent = np.random.uniform(-6, -1, 10000)
x = 10**x
x 的直方图如下所示:
而 x 的对数直方图(根据构造等于指数)看起来漂亮且统一:
我在 python 中使用随机数,问题如下; 我有一个变量,我们可以称它为“x”,我希望它取 [10^-6,10^-1] 之间的值,然后我有以下行
x=np.random.uniform[1e-6,1e-1]
但它只生成像
这样的数字0.123123 0.524234 0.0453454 0.9083405
它永远不会生成像
这样的数字0.0002342 0.00002434 0.313123 0.000004234 0.034234
如何生成第二种随机数?生成大小为 1e-1,1e-2,1e-3,1e-4,1e-5,1e-6
?
我不确定您是否以正确的方式调用函数,但您可以使用其他自定义函数,例如:
import numpy as np
def myRandomUniform(max_value, min_value):
return (max_value - min_value)*np.random.uniform() + min_value
max_value = 1e-1
min_value = 1e-6
x = myRandomUniform(max_value, min_value)
编辑: 我制作了一个直方图 1.000.000 随机数,看起来它正在生成您想要的小值。 Histogram using random function
我可能找到了一个更好的方法,如果我们制作 np.random.uniform(1e-6,1e-1)
的直方图,一开始它当然会非常均匀,但这里的重点是制作 log10 的直方图数据,即
data=[np.log10(np.random.uniform(1e-6,1e-1))for _ in range(100000)]
plt.hist(data)
它会给我们 https://i.stack.imgur.com/rgMKQ.png 这显然是不统一的。然后我定义了下面的函数
def ram(Min):
x=np.random.choice([Min,Min*1e1,Min*1e2,Min*1e3,Min*1e4])
r=np.random.uniform(0.01*x,10.1*x)
return(r)
如果我们做直方图,
data = [np.log10(ram(1e-6)) for _ in range(100000)]
plt.hist(data)
它会给我们,
https://i.stack.imgur.com/jxpeQ.png
这显然在1e-6 and 1e-1
之间更均匀。
现在的目标是改进该功能。
这是直方图之间的比较。 https://i.stack.imgur.com/SXPWk.png
您似乎在寻找对数分布的数据,其中统计的日志是均匀分布的。知道这一点,您可以轻松构造这些数字:
import numpy as np
exponent = np.random.uniform(-6, -1, 10000)
x = 10**x
x 的直方图如下所示:
而 x 的对数直方图(根据构造等于指数)看起来漂亮且统一: