Python生成正态分布的伪数据
我正在尝试生成一些数据,例如:年龄与一周内堆栈溢出花费的小时数。我尝试使用randn
函数,但它不能控制生成的值的范围和值的量化。我尝试了一些算法,例如盒子加工方法,但同样的问题也出现在那里。可以生成两个均匀变量,但对正态分布值的控制是什么?有人可以解释我,我怎么可以在Python中执行此操作?Python生成正态分布的伪数据
我认为这是你在找什么:
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))
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()
这不是我的问题的答案 – user8778850
我想要的是pdf处于一定的范围内,并为我提供了量化值。年龄只有12到50之间的自然数。我需要年龄的实际值 – user8778850
我假定这两个变量是独立的。这是一种做正义年龄的方法。
>>> 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)
为什么这个问题是低估的。你给了我最完美的答案 – user8778850
可能是因为你没有显示你编写的代码试图为你自己解决问题。我只是在猜测。我厌恶选票,因为很难知道选民抗议的是什么。事实上,如果你看我的档案,你会发现我只有一次倒票。 –
你所说的“价值量化”是什么意思? – user8153
我不希望年龄为12.3岁,它应该只是整数,其中小时可以是0.5小时的倍数@ user8153 – user8778850
请问[this](https://stackoverflow.com/questions/36894191/)帮帮我? –