numpy重复和这种方法之间的区别

时间:2018-09-20 08:47:28

标签: python statistics

我想生成90(10 + 30 + 50)个随机样本,创建一个列表,其中包含这90个随机生成的样本,并找到样本中位数。这就是我得到的:

sub_pop = [300, 500, 1000]
samplesize = [10, 30, 50]
std_list = [40, 50, 60]
mean_list = [50, 60, 70]

换句话说,我想从sub_pop 300随机生成10个子样本大小,从sub_pop 500随机生成30个子样本大小,从sub_pop 1000生成50个子样本大小,然后将结果附加到单个列表中。每个sub_pop正态分布如下:sub_pop 300正态分布std dev 40和均值50,sub_pop 500正态分布wif std dev 50和均值60,依此类推。

这是我到目前为止所做的:

import numpy as np
n_pop = 1800
obs_size = 90
sub_pop = [300, 500, 1000]
samplesize = [10, 30, 50]
std_list = [40, 50, 60]
mean_list = [50, 60, 70]

list = []
for i in range(300):
    list += np.random.normal(loc = 50, scale = 40, size = 10).tolist()

for i in range(500):
    list += np.random.normal(loc = 60, scale = 50, size = 30).tolist()

for i in range(1000):
    list += np.random.normal(loc = 70, scale = 60, size = 50).tolist()

list1 = [abs(x) for x in list]
print(list1)
print(np.median(list1))

我的方法正确吗?

2 个答案:

答案 0 :(得分:0)

不确定要执行的操作,而不是

for i in range(1000):
    list += np.random.normal(loc = 70, scale = 60, size = 50).tolist()

您可以使用

x = np.random.normal(loc = 70, scale = 60, size = (50, 1000))

那绝对是正义的

x_abs = np.abs(x)

要正确使用中位数,请使用keyword axis指定要对哪个维度进行操作。

也许

np.median(x_abs, axis=1)

答案 1 :(得分:0)

假设您要一个样本,其中包含指定的总体。

sub_pop = [300, 500, 1000]
samplesize = [10, 30, 50]
std_list = [40, 50, 60]
mean_list = [50, 60, 70]

data=[np.random.normal(loc=mean_list[i], scale=std_list[i], size=samplesize[i]) for i in range(3)]
x = [elt for L in data for elt in L]

上面的代码创建一个包含所有元素的平面列表。然后,您需要中位数,所以我假设是这样的:

import statistics
statistics.median(x)

您的目标/数据确实不清楚。希望您能在我们提供的代码中找到一些想法。