repeat = 50
samplesize = 14
samplesize_list = [2, 5, 7]
std_list = [10, 20, 30]
mean_list = [1000, 2000, 3000]
repeat_median = np.empty(repeat, dtype = float)
for j in range(len(samplesize_list)):
size = samplesize_list[j]
for z in range(len(std_list)):
std_list = std_list[z]
for m in range(len(mean_list)):
mean_list = mean_list[m]
for i in range(repeat):
sample_data = np.random.normal(mean_list, std_list, size)
repeat_median[i] = np.median(sample_data)
plt.subplot(len(samplesize_list), 1, j+1)
sns.distplot(repeat_median, color = 'blue')
plt.legend(loc = "upper right")
plt.show()
我的代码中的for循环有点问题。我正在尝试使用50个不同结果的重复随机抽样来找到样本中位数的样本分布。因此,我应该只有一张图来显示14个样本的样本中位数的分布(组成14个样本的3个不同的子组(2、5、7)分别以各自的均值和标准差正态分布)。 / p>
例如:总体2的子群正态分布为标准偏差10,平均值为1000。总体5的子群正态分布为标准偏差20,平均值为2000,依此类推。在这种情况下,如何将它们循环在一起?
答案 0 :(得分:1)
我最近在昨天用类似的输出回答了类似的问题。我不确定是否是您再次发布了它。尽管如此,在代码中定义变量还是有一些错误。以下是带有输出的工作版本。修改/添加的行带有注释#
repeat = 50
samplesize = 14
samplesize_list = [2, 5, 7]
std_list = [10, 20, 30]
mean_list = [1000, 2000, 3000]
repeat_median = np.empty(repeat, dtype = float)
for j in range(len(samplesize_list)):
size = samplesize_list[j]
for z in range(len(std_list)):
std = std_list[z] # modified, you used the same name as variable
for m in range(len(mean_list)):
mean = mean_list[m] # modified, you used the same name as variable
for i in range(repeat):
sample_data = np.random.normal(mean, std, size)
repeat_median[i] = np.median(sample_data)
plt.subplot(len(samplesize_list), 1, j+1)
sns.distplot(repeat_median, color = 'blue', label='Size %d'%samplesize_list[j]) # added legend
plt.legend(loc = "upper right")
plt.tight_layout() # added for better subplot adjustment
输出
使用列表推导的方式编写代码的详细方式
for j, size in enumerate(samplesize_list):
for z, std in enumerate(std_list):
for m, mean in enumerate(mean_list):
for i in range(repeat):
sample_data = np.random.normal(mean, std, size)
repeat_median[i] = np.median(sample_data)