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个样本的样本中位数的分布(3个不同的子组(2,5,7)组成14个样本,每个样本正常分布有自己的均值和标准差)。
例如:群体2的子群通常以标准差10和平均值1000分布。群体5的子群通常以标准偏差20和平均值2000分布,依此类推。在这种情况下如何将它们循环在一起?
我最近昨天用类似的输出回答了类似的问题。我不确定是不是你再次发布了它。然而,在代码中定义变量时会出现几个错误。以下是带输出的工作版本。修改/添加的行由注释#
标记
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)