2017-10-15 150 views
-1

我正在尝试生成一些数据,例如:年龄与一周内堆栈溢出花费的小时数。我尝试使用randn函数,但它不能控制生成的值的范围和值的量化。我尝试了一些算法,例如盒子加工方法,但同样的问题也出现在那里。可以生成两个均匀变量,但对正态分布值的控制是什么?有人可以解释我,我怎么可以在Python中执行此操作?Python生成正态分布的伪数据

+0

你所说的“价值量化”是什么意思? – user8153

+0

我不希望年龄为12.3岁,它应该只是整数,其中小时可以是0.5小时的倍数@ user8153 – user8778850

+0

请问[this](https://stackoverflow.com/questions/36894191/)帮帮我? –

回答

0

我认为这是你在找什么:

def get_truncated_normal(mean=0, sd=1, low=0, upp=10): 
    return truncnorm(
     (low - mean)/sd, (upp - mean)/sd, loc=mean, scale=sd) 

X = get_truncated_normal(mean=15, sd=2, low=0, upp=1000) 
a=(X.rvs(100)) 
0

Numpy的random.normal将做的伎俩。您需要提供中位数,标准差和所需的大小。

import numpy as np 
import matplotlib.pyplot as plt 
import scipy.stats as stats 

M = 25 
SD = 5 
n = 100 
age = np.random.normal(M, SD, n) 
sorted_age = sorted(age) 

pdf = stats.norm.pdf(sorted_age, M, SD) 
plt.plot(sorted_age, pdf) 
plt.show() 

enter image description here

+0

这不是我的问题的答案 – user8778850

+0

我想要的是pdf处于一定的范围内,并为我提供了量化值。年龄只有12到50之间的自然数。我需要年龄的实际值 – user8778850

1

我假定这两个变量是独立的。这是一种做正义年龄的方法。

>>> import numpy as np 

生成大小50位置的随机的,单变量正常样品和规模30.

>>> ages = np.random.normal(30,30,50) 

丢弃值小于零。如果你需要一些固定的样本量,那么你必须做一些更聪明的事情。

>>> ages = [age for age in ages if age>=0] 

获得最大的年龄值,知道最大的bin边界必须是什么。

>>> max(ages) 
90.513300401178611 

创建箱到指定岁,0〜1,1〜2等

>>> bins = np.arange(0,92,1) 

确认最后一个块的边界是大到足以容纳最大年龄。

>>> max(bins) 
91 

将年龄分配给垃圾箱。

>>> sample = np.digitize(ages, bins) 

显示结果。

>>> sample 
array([20, 82, 73, 21, 7, 39, 56, 23, 37, 15, 9, 21, 46, 6, 51, 13, 89, 
     47, 46, 4, 78, 33, 29, 26, 74, 72, 62, 52, 2, 48, 39, 91, 40, 38, 
     40, 12, 59, 77, 52, 65, 35, 69, 31, 74, 18], dtype=int64) 
+0

为什么这个问题是低估的。你给了我最完美的答案 – user8778850

+0

可能是因为你没有显示你编写的代码试图为你自己解决问题。我只是在猜测。我厌恶选票,因为很难知道选民抗​​议的是什么。事实上,如果你看我的档案,你会发现我只有一次倒票。 –

相关问题