Создать выборочное распределение, используя случайно нарисованные знаки в другом столбце Python

#python #sampling

#python #выборка

Вопрос:

Я пытаюсь решить эту проблему

Создайте выборочное распределение для нашей оценки среднего значения за 30 наблюдений для C. Для этого случайным образом нарисуйте 1000 наборов из 30 наблюдений из C, используя случайно нарисованные индексы в D (первая строка — это первые 30 случайно нарисованных индексов, вторая строка — вторые 30 случайно нарисованных индексов и т.д.). Для каждого случайного розыгрыша вычислите среднее значение. Затем постройте гистограмму распределения. Сравните распределение с np.mean(C).

Где C — это

 array([23, 23, 23, ..., 68, 34, 42])
  

и размер C равен 100030 , а столбец D равен (с размером 30000 )

 array([[23989, 10991, 81533, ..., 75050, 13817, 47678],
       [54864, 54830, 89396, ..., 22709, 14556, 62298],
       [ 2936, 28729,  4404, ..., 21431, 81187, 49178],
       ...,
       [30737, 12974, 41031, ..., 43003, 61132, 33385],
       [64713, 53207, 49529, ..., 72596, 76406, 15207],
       [29503, 71648, 27210, ..., 31298, 47102, 13024]])
  

Я пытаюсь понять проблему здесь и как ее решить. Что я сделал до сих пор, так это инициализировал список нулями и попытался получить среднее значение на основе индексов в D. Но я не уверен, что это то, о чем на самом деле просят? Любая помощь?

  samp = np.zeros( (1000, 1))
    for i in np.arrange(0, 1000):
       samp(i) = np.mean(C( D(i,)))
  

кроме того, это берет случайные выборки из C, но не уверен, как добавить к нему общие индексы?

 means_size_30 = []
for x in range(1000):
    mean = np.random.choice(C, size = 30).mean()
    means_size_30.append(mean)
means_size_30 = np.array(means_size_30)
plt.hist(means_size_30);
  

Ответ №1:

Вы можете напрямую получить доступ к значениям C, используя индексы, предоставленные в D. Если вы используете 2-мерный массив D для доступа к значениям 1-мерного массива C, результирующий массив будет иметь ту же форму, что и D: 2-мерный. В нем будет 1000 строк, в каждой строке по 30 выборок из C.

На следующем шаге вам просто нужно вычислить среднее значение по каждой строке (установить ось = 1):

 means_size_30 = C[D].mean(axis=1)
plt.hist(means_size_30)
plt.axvline(np.mean(C))
  

Комментарии:

1. Потрясающее решение! Большое спасибо. Не относится к этому конкретному вопросу, но что, если я хочу получать первые десять строк каждый раз? Для выборки размером 300 мне нужно 10 строк D каждый раз, а затем следующие десять строк и так далее