Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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_Frequency Distribution - Fatal编程技术网

Python中遵循线性下降分布的随机数

Python中遵循线性下降分布的随机数,python,random,frequency-distribution,Python,Random,Frequency Distribution,我想生成服从线性频率分布的随机数,以n=1-x为例 然而,numpy库似乎只提供了更复杂的分布。因此,您完全可以使用random.triangular0,1,0来实现这一点。请参阅此处的文档: random.triangularlow,high,mode 返回一个随机浮点数N,对于密度为的非规范化PDF,其值为low 1-x, in the range [0...1) 归一化常数为1/2 CDF等于2x-x^2 因此,抽样是很明显的 r = 1.0 - math.sqrt(random.ran

我想生成服从线性频率分布的随机数,以n=1-x为例


然而,numpy库似乎只提供了更复杂的分布。

因此,您完全可以使用random.triangular0,1,0来实现这一点。请参阅此处的文档:

random.triangularlow,high,mode


返回一个随机浮点数N,对于密度为的非规范化PDF,其值为low

1-x, in the range [0...1)
归一化常数为1/2

CDF等于2x-x^2

因此,抽样是很明显的

r = 1.0 - math.sqrt(random.random())
示例程序生成了几乎相同的绘图

import math
import random
import matplotlib.pyplot as plt

bins = [0.1 * i for i in range(12)]
plt.hist([(1.0 - math.sqrt(random.random())) for k in range(10000)], bins)
plt.show()
更新

让我们把s表示为一个积分,s_a^b是从a到b的定积分

所以

正常化:

N = S_0^1 (1-x) dx = 1/2
因此,规范化PDF

PDF(x) = 2*(1-x)
让我们计算CDF

CDF(x) = S_0^x PDF(x) dx = 2x - x*x
检查:CDF0=0,CDF1=1

通过求解x,通过逆CDF方法进行采样

其中U0,1是[0,1]中的均匀随机数

这是一个有解的简单二次方程

x = 1 - sqrt(1 - U(0,1)) = 1 - sqrt(U(0,1))

它直接翻译成Python代码

欢迎来到SO Martin!社区将很乐意帮助您解决在处理某个问题时遇到的编码问题。但是,您需要提供您编写的代码和遇到的问题。通常情况下,我们不会为您编写代码。这个问题非常重要,我甚至无法解决开始编码。你能解释一下如何获取公式吗?
CDF(x) = S_0^x PDF(x) dx = 2x - x*x
CDF(x) = U(0,1)
x = 1 - sqrt(1 - U(0,1)) = 1 - sqrt(U(0,1))