随机数、小数位

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 的对数直方图(根据构造等于指数)看起来漂亮且统一: