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