使用Python在非正态分布中生成随机数

时间:2019-02-06 19:39:53

标签: python pandas numpy

我正在尝试测试一些分类函数,因此我需要生成非均匀的随机数,以便出现异常值(平均值+-3 * SD)。到目前为止,我所看到的只是numpy的随机分布。

import numpy as np
np.random.rand(100)
s = np.random.randint(0,100, size=(10000,1))

结果     [10,20,30,...]

s[(abs(s - s.mean())) > (3*s.std())]

在这里,我希望能看到30个离群值,但是结果会产生一个空数组。

2 个答案:

答案 0 :(得分:0)

好的老normal distribution怎么样?可以使用numpy.random.standard_normalnumpy.random.normal从正态分布中进行采样:

src/main/resources/applicationContext.xml

答案 1 :(得分:0)

您的过滤器是正确的:问题是u niform distribution的标准偏差为(b-a)/sqrt(12)(范围很广的随机整数样本与均匀分布非常相似)。因此,平均值+-3倍标准偏差始终位于样本范围之外

您需要无限制的分布和/或形状更居中的东西。这个例子可以工作(大小可能有所不同,取决于您的分布):

# power of 0-1 random
s = np.random.random(10000)**5
s[np.abs(s - s.mean()) > s.std() * 3].size
>> 164

# average of 6 uniforms
s=np.sum(np.random.randint(0,1000, size=10000) for i in range(6))/6
s[np.abs(s - s.mean()) > s.std() * 3].size
>> 16

# And of course unbounded distributions such as the normal:
s = np.random.normal(size=10000)
s[np.abs(s - s.mean()) > s.std() * 3].size
>> 27