Согласно образцу вашего кода, проблема заключается в проблеме построения графика, а не в вычислениях, поэтому вы видите правильное среднее значение. Как вы можете видеть, на следующем изображении показаны пять полосок, последняя из которых в два раза больше остальных:
Обратите внимание, что полосы обозначены слева, поэтому полоски «6» нет. Это связано с тем, что plt.hist
означает bins
:
Если бины является последовательностью, она определяет края бункера, включая левый край первого бункера и правый край последнего бункера; в этом случае интервалы могут быть расположены неравномерно. Все, кроме последнего (самого правого) бункера, наполовину открыты. 1023 *
![enter image description here](https://i.stack.imgur.com/dHcHJ.png)
незаданные вопросы
Если вы хотите смоделировать N * n
точек данных, вы можете использовать numpy напрямую. Замените исходную инициализацию result
и for
l oop любой из следующих строк:
result = (np.random.uniform(size=(n, N)) * 6 + 1).astype(int)
result = np.random.uniform(1.0. 7.0, size=(n, N)).astype(int)
result = np.random.randint(1, 7, size=(n, N))
Последняя строка предпочтительнее с точки зрения эффективности и точности.
Еще одно возможное улучшение - это способ вычисления гистограммы. Прямо сейчас вы используете plt.hist
, который вызывает np.histogram
и plt.bar
. Для небольших целых чисел, таких как у вас, np.bincount
, возможно, гораздо лучший метод биннинга:
count = np.bincount(result.ravel())[1:]
plt.bar(np.arange(1, 7), count)
Обратите внимание, что это также упрощает построение, поскольку вы напрямую указываете центры полос, вместо plt.hist
угадайте.