我想生成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))
我的方法正确吗?
答案 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)
您的目标/数据确实不清楚。希望您能在我们提供的代码中找到一些想法。