Генерация нормально распределенных выборок - PullRequest
0 голосов
/ 19 сентября 2018

нужна помощь в понимании этих строк кода!у меня есть 3 подгруппы: 10, 30 и 50, каждая из которых, как правило, распределена со своим соответствующим стандартным значением dev и означает, как показано: например, для подгруппы 10 будет стандартное отклонение 3000 и среднее значение 10000.что я хочу сделать, это провести случайную выборку этих подгрупп населения и поместить результаты в список, который я назвал «образец».вопрос в следующем: правильно ли я кодировал свою цель в строке образца + = np.random.normal (mean_List [I], std_list [I], sub_pop [I]). tolist ()?

sub_pop = [10, 30, 50]
std_list = [3000, 5000, 8000]
mean_list = [10000, 15000, 30000]
sample = []
for i in range(len(sub_pop)):
sample += np.random.normal(mean_list[i],std_list[i], sub_pop[i]).tolist()
sample1 = [abs(x) for x in sample]
print(sample1)
print(np.median(sample1))

1 Ответ

0 голосов
/ 19 сентября 2018

Из ваших комментариев кажется, что вы уже знаете, что делает код, и просто хотите получить некоторую уверенность в том, что вы вызываете метод numpy с правильными параметрами.Я думаю, что в вашем текущем коде есть одна проблема: вы объединяете все ваши популяции в одну выходную выборку.

Чтобы проиллюстрировать это, я увеличил размеры популяции до 5000 для построения графиков.Если вы не очищаете список sample на каждой итерации, вы просто продолжаете добавлять к нему:

import numpy as np

import matplotlib.pyplot as plt

sub_pop = [5000, 5000, 5000]
std_list = [3000, 5000, 8000]
mean_list = [10000, 15000, 30000]
sample = []
for i in range(len(sub_pop)):
    sample += np.random.normal(mean_list[i],std_list[i], sub_pop[i]).tolist()
    sample1 = [abs(x) for x in sample]

plt.hist(sample, bins=500)
#plt.show()
plt.savefig('all_merged.png')

, что дает: enter image description here

ВместоЯ думаю, вы, вероятно, хотите три отдельных населения.Если вам не нужны отдельные группы населения, по крайней мере, это служит разъяснением того, получаете ли вы ожидаемый результат:)

import numpy as np

import matplotlib.pyplot as plt

sub_pop = [5000, 5000, 5000]
std_list = [3000, 5000, 8000]
mean_list = [10000, 15000, 30000]
sample = []
for i in range(len(sub_pop)):
    sample += np.random.normal(mean_list[i],std_list[i], sub_pop[i]).tolist()
    sample1 = [abs(x) for x in sample]

    plt.hist(sample, bins=500)
    sample = [] # Clear the sample list
#plt.show()
plt.savefig('separated.png')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...