np.random.choice имеет пробел в гистограмме - PullRequest
1 голос
/ 04 ноября 2019

Я использую np.random.choice, чтобы построить гистограмму суммы броска 2 равномерно взвешенных костей. Однако, когда я запускаю код, значения для 7, которые должны иметь наибольшее количество возвращений, отсутствуют.

import numpy as np
import matplotlib.pyplot as plt

values = [1, 2, 3, 4, 5, 6]
z = 1/6
x = np.random.choice(values, 1000000, p=[z, z, z, z, z, z])
y = np.random.choice(values, 1000000, p=[z, z, z, z, z, z])

plt.hist(x + y, 12, color="green", edgecolor='black', linewidth=1.2, label="Uniform Dist", rwidth=.75)
plt.show()

np.random.choice: sum for 2 dice

Любые предложения почто не так?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2019

Нет значений в интервале 6.167 <= x < 7.0. Числа 7 включены в интервал 7.0 <= x < 7.833.

. Я бы рекомендовал построить гистограмму дискретных частот.

plt.bar(*np.unique(x+y, return_counts=True))

enter image description here

2 голосов
/ 04 ноября 2019

Проблема в том, что plt.hist алгоритм объединения подходит для действительных значений, а не для целых (дискретных) значений.

Пояснение

Давайте посмотрим на бины, предложенные matplotlib:

n, bins, _ = plt.hist(x + y, bb, color="green", edgecolor='black', linewidth=1.2, label="Uniform Dist", rwidth=.75)

bins:

array([ 2.        ,  2.83333333,  3.66666667,  4.5       ,  5.33333333,
        6.16666667,  7.        ,  7.83333333,  8.66666667,  9.5       ,
       10.33333333, 11.16666667, 12.        ])

Шестой столбец имеет диапазон [bins[5], bins[6]), равный [6.17, 7.00) - обратите внимание, что этополуоткрытый. Поэтому нет целое число принадлежит этому диапазону.

Решение

Решение состоит в том, чтобы вручную задать ячейки:

values = x + y
bins = np.arange(np.min(values) - .5, np.max(values) + 0.5, 1)

plt.hist(values, bins, color="green", edgecolor='black', linewidth=1.2, label="Uniform Dist", rwidth=.75)

bins равноarray([0.5, 1.5, 2.5, 3.5, 4.5, 5.5, ..., 10.5, 11.5, 12.5]).

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