使用python将随机样本分成子组

时间:2017-04-21 11:01:34

标签: python-3.x numpy statistics

所以我有这个统计数据作业,我想用python和numpy来做。 问题始于制作1000个随机样本,这些样本遵循正态分布。 random_sample=np.random.randn(1000)
然后它想把这些数字分成几个子组。例如,假设我们将它们分成五个子组。第一个子组是(-5,-3)范围内的随机数,它继续到最后一个子组(3,5)。 无论如何使用numpy(或其他任何东西)吗? 如果有可能,我希望它在子组数量发生变化时起作用。

2 个答案:

答案 0 :(得分:0)

您可以使用numpy.digitize获取子组索引:

random_sample = 5 * np.random.randn(10)
random_sample
# -> array([-3.99645573,  0.44242061,  8.65191515, -1.62643622,  1.40187879,
#            5.31503683, -4.73614766,  2.00544974, -6.35537813, -7.2970433 ])
indices = np.digitize(random_sample, (-3,-1,1,3))
indices
# -> array([0, 2, 4, 1, 3, 4, 0, 3, 0, 0])

答案 1 :(得分:0)

如果你对random_sample进行排序,那么你可以通过查找"断点"的索引来划分这个数组。 values - 最接近您定义的范围的值,例如-3,-5。代码类似于:

import numpy as np
my_range = [-5,-3,-1,1,3,5] # example of ranges
random_sample = np.random.randn(1000)
hist = np.sort(random_sample)
# argmin() will find index where absolute difference is closest to zero
idx = [np.abs(hist-i).argmin() for i in my_range]
groups=[hist[idx[i]:idx[i+1]] for i in range(len(idx)-1)]

现在groups是一个列表,其中每个元素都是一个数组,其中所有随机值都在您定义的范围内。