Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在随机函数Python中跨越范围?_Python_Random - Fatal编程技术网

如何在随机函数Python中跨越范围?

如何在随机函数Python中跨越范围?,python,random,Python,Random,我想得到一个从0到1e-20的随机数,我在Python中使用以下函数 random.uniform(1e0, 1e-20) 但是,数字仅从1e0开始,缺少范围的其余部分,如1e-12、1e-9等 如何在所有范围中获得一个数字 更新: 0.8997498299014705 0.8320065922653802 0.9894039561126263 0.015205024292817781 0.8460417648041141 0.9744256248957714 0.10799180387896

我想得到一个从0到1e-20的随机数,我在Python中使用以下函数

random.uniform(1e0, 1e-20)
但是,数字仅从1e0开始,缺少范围的其余部分,如1e-12、1e-9等

如何在所有范围中获得一个数字

更新:

0.8997498299014705
0.8320065922653802
0.9894039561126263
0.015205024292817781
0.8460417648041141
0.9744256248957714
0.10799180387896301
0.195940099219041
0.19830039605178706
0.694803475206833
0.5869371229317706
0.5762011063374192
0.2761909685255569
0.9757648088382384
0.0786057337977103
0.7090714156637489
0.6946835664286121
0.5975036696040513
0.7426259364954565
0.1116434886497456
0.6691228131282176
根据该公式,区间[a=1e0,b=1-20e]内的概率为p(x)=1/(b-a)。这意味着概率永远是-1,因为b非常接近于零,就像1除以-1。如果你交换and和b,它变成+1。不知何故,这只会导致输出值介于1和0之间

使用以下代码进行测试:

import numpy as np
from matplotlib import pyplot as plt

test = np.random.uniform(1e0, 1e-20, 500)

plt.hist(test, bins=50, density=True)
plt.show()

正如其他人在评论中指出的那样,您的代码实现了您声称的目标,但您的目标似乎与您声称的目标不同

看起来,您想要的是生成随机数,使其以10为底的对数均匀分布在-20和0之间。这些数字被称为而不是统一的。如果是这样,只需在[-20,0]中均匀地生成指数,然后将10增加到这些数字:

import random

for i in range(10):
    print(pow(10,random.uniform(-20,0)))

#typical output:

0.0005139787035284368
1.1615946347073329e-14
2.455360025929292e-07
1.615010435306129e-14
0.007962057074320813
1.1641947007189282e-17
3.725480259325438e-18
3.5028054406435525e-09
1.4739445873699184e-11
2.322173584509162e-16

这与预期一样有效,返回的数字介于1e-20和1之间。你期望有什么不同的产出?请注意,输出小于1e-12的概率接近1e-12,因此不要期望经常看到这种大小的输出…我已经用一些输出更新了帖子。你可以观察到这些值是如何比1e-20更接近1e0的,我期望有各种各样的值“小数点位置变化”,那么你就不想要均匀分布了。在这种情况下,你应该明确你想要得到的分布。有无限多不同的可能的随机分布(例如一些非常常见的分布)。你显然不想要一个均匀分布,但是如果你不解释的话,我们无法猜测你想要你的随机数是如何分布的。这就是均匀分布的确切含义,这就是为什么你得到这么少非常小的值,因为在均匀分布中得到它们的概率当然非常低。因此,正如前面所解释的,你显然不想要一个均匀的分布,你所说的
以相同的概率覆盖所有的范围
并不是“相同的概率”在概率中的意思。那么,请解释一下你的确切意思。我该如何解决我的问题?