Python で 一様分布にまつわる計算を実施してみました。 結果を以下に記載します。
一様分布とは
統計学入門 - 東京大学出版会 の p.119 には、以下のように記載されています。
さいころを振った時に出る目Xの確率分布が一様分布の例
\(f(x)=1/N, x = 1,2,…, N (N は正整数)\)
を、\(1,2,…,N\)上の離散一様分布 uniform distribution of discrete type という。
一様分布には、離散一様分布 - Wikipedia と連続一様分布 - Wikipedia があります。
さいころの取り得る値は\(1,2,3,4,5,6\) であり連続しないため離散一様分布となります。
使用するライブラリについて
基本的に、自前実装しないを方針で、以下ライブラリを使用しました。
* random.uniform
* numpy.random.uniform
* scipy.stats.uniform
random.uniform を使う
random.uniform
を使うと、下限、上限の範囲内で、random な値を生成できます。
import random
a = random.uniform(1, 6)
print(a)
2.073915855291017
さいころのイメージで、棒の数6でヒストグラム描画を行います。
x = []
for i in range(1000):
x.append(random.uniform(1, 6))
import matplotlib
%matplotlib inline
matplotlib.pyplot.hist(x, bins=6)
(array([ 171., 145., 189., 164., 155., 176.]),
array([ 1.01715776, 1.84730943, 2.6774611 , 3.50761277, 4.33776444,
5.16791611, 5.99806778]),
<a list of 6 Patch objects>)
だいたい、6分の1 で分布しているように思います。
numpy.random.uniform を使う
下限 low
、上限 high
、要素数 size
の一様分布に従う配列を生成する関数です。
import numpy as np
s = np.random.uniform(1,6,1000)
print(s)
[ 5.66314323 4.24489532 4.25479131 4.67518273 3.23827495 1.20649119
2.90638637 3.85171153 5.90247421 5.91913148 4.36391495 4.77994949
3.28645749 5.1156919 1.61482493 2.06972991 4.87172926 1.37647802
5.57305749 3.0910897 2.56891181 2.4679285 3.74893254 1.43666388
3.27756165 2.86923295 5.65490362 4.87629593 3.51306495 4.27637317
4.20714485 5.13605215 4.86762244 5.83230728 2.65764513 2.93308121
4.9501155 5.22641091 4.47706337 2.57133777 1.21121026 4.95746902
2.80730349 2.45832209 1.58385926 2.30719041 1.37861874 2.53203029
1.596917 5.30860959 4.3155518 2.29168103 5.78725053 2.48993979
5.99268202 1.65994826 2.03366997 4.70661814 4.13072759 1.8139958
2.02398836 2.80330056 2.38506211 3.29748896 2.99876439 5.33003442
3.30617187 5.50879808 1.92516985 1.8619623 1.95220705 5.89865961
2.36102088 3.7856038 1.3563284 2.35734946 1.83530203 5.11899572
1.93791587 1.2881385 4.62798156 2.48483749 3.2646317 2.22951083
1.56004729 2.21991011 1.36590055 4.44757149 4.74792205 2.96552328
4.15325941 4.75936044 5.09805294 2.97005915 4.12279753 3.05514655
1.0727981 5.15865529 5.71808231 2.25604534 1.88280227 4.30727389
1.58076087 3.65597896 3.48245016 5.41260436 4.11282067 2.51173837
4.84342387 3.33135571 3.51676632 1.41211791 3.95935942 4.82836874
5.74614835 3.91508551 3.73844019 4.28904113 3.25905025 5.76836508
4.29300209 3.6577281 2.0960961 1.97682339 4.09733727 1.7870182
3.06139641 2.20056788 5.37711681 1.02424963 1.3203103 2.59895689
1.72451711 5.00822225 5.59120976 3.55134442 1.11528255 2.1562806
2.82047465 3.70139691 4.19661961 1.4365443 1.53828388 1.98078507
3.40961686 3.65601316 1.01649781 5.25078441 3.20289822 2.88066335
1.20319301 4.91810095 5.41797743 1.53503761 1.83534767 2.25150953
2.24488649 2.55708702 1.95509582 4.90295917 2.07355042 4.91289126
1.73659647 4.32991717 1.01311263 2.77614579 5.30408615 5.96899214
5.74984395 4.09436141 2.19500411 3.57770533 5.49386397 2.55887468
5.23837299 5.45247015 1.8120512 5.00924146 5.36065431 2.0472757
5.45627388 4.91594116 4.10726927 2.91073009 2.29407745 2.61072639
3.07984413 1.44279362 4.39839339 4.25892466 1.96534861 5.345804
2.72511069 4.70516206 3.84578639 1.87908357 5.82089122 4.97314743
4.84359815 2.39399651 1.22786595 5.21686947 2.95441137 4.66715191
3.95768627 4.05574048 2.74157238 3.68929438 5.35271592 1.81981425
5.2301143 4.81650904 1.14266922 4.3464694 1.53448837 4.62753168
2.51401773 3.33581252 3.47040366 3.24750998 2.06206575 2.26926619
4.64831796 3.31884173 2.93068201 3.02225441 4.21413245 5.31136594
1.48421035 5.4161729 3.33340393 3.32857837 2.44567905 3.42617048
5.11685686 1.00002445 1.1338625 1.00084931 3.72394049 1.59173517
4.58001394 3.96170856 3.66239524 1.01473059 3.87780626 2.00290987
2.58343135 1.68784117 3.62181768 4.10926898 4.21358931 2.1100053
2.76041676 5.81753715 5.06562264 2.55325758 2.63460731 1.25842647
5.68727056 5.81891718 1.76495407 1.48488111 5.22038744 5.29408664
4.34502965 4.78270864 5.11632833 4.47150065 4.86365928 5.98301965
2.22469686 5.45986766 3.29780327 2.19645574 2.10410039 4.41723568
2.68072244 3.44923531 2.39659193 5.77717987 5.32512329 5.0331973
1.89205476 4.11747315 3.4369065 4.92997002 1.48678746 4.64628988
5.97769366 5.3779644 3.70534736 1.07447331 3.21167532 5.1513734
5.50152222 5.52698773 2.13967436 1.64998223 3.34948615 3.98797528
4.10059004 2.71385332 5.8373421 5.47223921 3.88691776 4.43883242
3.94723949 3.97203335 4.51153 2.33488186 5.80757564 3.50134311
4.62492877 2.379709 4.16797238 4.18424889 5.23512231 1.84257495
5.00944908 3.15531702 3.28505943 1.18118644 2.78444912 1.35360746
1.08814889 3.19441426 4.62713485 4.75467107 3.25075901 5.81412771
4.66269151 1.29940434 5.32050449 4.70547679 4.75650817 3.35703646
5.01447686 1.91004714 2.65407628 3.81732016 3.21753885 2.29281565
4.98305671 3.64507961 5.43832538 1.26038394 2.860566 5.61192014
2.76439084 5.50535124 4.53281458 1.43606875 2.3898353 4.84061005
3.86844107 1.8217425 3.13778325 4.85290445 3.40809562 4.02062845
3.01471895 2.19242217 5.72737451 4.00211705 3.40569298 2.91560015
2.42265827 2.73240401 2.59510342 2.08331538 3.03838311 2.1861959
2.62336772 2.38923714 4.24273334 5.64554355 3.30969045 3.04712549
5.72186924 5.77501618 3.31338891 1.76330055 4.84946719 2.33751364
2.31961523 5.81255425 1.24359969 3.64835924 3.78453095 4.14567588
3.67778143 3.02257983 5.64273297 4.31194541 2.24277815 5.27481695
4.56533656 1.65780156 3.5997441 4.03835116 5.28255367 1.68842351
1.78860005 5.90935488 3.25143121 4.41157452 1.66628864 5.18953454
5.89523608 1.85442619 5.99944918 5.1451415 2.27863556 5.75423881
3.5783187 1.86471032 4.02838863 4.22520408 5.5433202 2.92085891
3.74201609 1.43449414 1.59037708 1.82921402 2.33082041 3.05185764
1.48258307 2.45760353 3.69844546 4.10747741 4.53375976 4.75937577
5.11780036 3.34012288 5.08035134 2.85230397 2.28749751 3.44031229
1.40798238 1.05979892 3.21535161 3.20792646 1.54873593 1.82502156
4.00456068 5.89448687 1.33819513 4.06078167 1.9372134 2.20676271
3.60414479 3.55984952 4.76020818 5.5581863 3.18629077 3.25870003
4.82189653 3.72247519 1.6110926 2.28493634 1.05636705 5.21450039
3.14548878 2.91042594 3.8513145 3.69297925 1.0586049 2.06950164
4.6721573 5.00290785 4.58131996 1.50255207 3.63738665 2.52435814
3.45809521 4.13107833 1.47924786 2.93035959 1.45711659 3.11658863
3.71587259 4.84232314 4.23532576 1.87991292 5.86555295 1.79949227
4.26695584 3.66543773 5.25859726 1.71400761 5.17585639 1.11208655
4.84104425 3.85174001 5.72351563 5.52273547 4.57295622 3.82123849
2.35691819 1.0019965 4.01150587 5.02293658 1.44471813 5.77011399
1.60425617 3.1069816 5.02264242 2.53148702 2.22340093 2.33197345
2.04519988 3.54913856 4.84236749 2.74424633 5.8433628 1.2813768
3.52258614 5.58984868 1.74464914 4.51406118 4.24415284 4.5459739
3.87259257 5.58733441 3.55304447 2.41004856 3.80083021 3.47100937
2.92103675 5.00893902 3.09759541 3.55084035 2.80594826 5.67826212
5.73019286 3.33898089 5.6241248 4.69705838 1.91803999 3.57770266
3.63239061 5.37544096 4.93087289 3.6754247 1.10135643 1.4166993
3.67458444 1.318632 5.83606013 2.63095645 2.7810249 1.32142164
1.3145962 2.48452648 1.24590337 1.59202021 5.7747101 1.59130227
4.27839511 2.39746544 3.49046596 1.17617977 3.56070645 1.72774238
3.89068617 5.95904758 4.0923199 3.97062536 2.60861137 1.39009805
5.56436432 5.89796864 4.80675811 3.11052975 2.66742836 2.41391215
5.54712204 3.21968403 2.24629541 3.12009821 3.52631289 2.91261235
1.84752295 1.97168055 3.49375226 1.26502815 3.06052973 2.31665103
4.11869572 2.37301371 2.45454292 1.58585778 3.89287025 4.57973404
5.86798253 2.02624406 3.35299473 2.68558018 5.5725805 1.45408723
1.51040105 2.24360867 2.64625107 2.51067932 1.24506064 4.49713407
5.58199381 4.54565966 3.87488334 2.98575709 1.83304202 3.61944225
4.14935503 4.41523358 5.57597924 4.96594486 4.56249529 2.44636453
1.57725115 3.99881444 4.04340836 4.61994551 2.43700799 1.78090737
1.87465065 2.56228248 5.01611976 2.41071848 3.49077832 5.21439786
5.93074655 1.17698554 4.5981338 4.31704421 5.96337575 1.42252826
4.09035068 2.86687639 3.46486848 2.319884 4.96417009 4.94818649
1.84868987 1.70766497 1.79764092 5.71294665 1.55191669 3.61335006
1.6688361 3.15853219 1.59073514 1.47256617 2.75964746 4.36519603
3.90664263 1.7781111 4.1128021 3.29334299 3.8453606 1.10722124
4.53166869 5.74289421 5.45099278 1.8392859 4.05365136 3.31713861
1.34453717 2.37721385 3.8203113 5.03506878 3.04277605 5.63787367
2.06491627 3.21932741 2.24448062 2.45311119 3.45971474 4.63934036
2.88815016 2.75592935 5.24693105 2.39844029 1.58839567 2.64524343
3.91412504 4.64321239 4.52049872 1.35574451 2.14872522 4.18261404
1.38106253 2.87147181 2.89299755 2.5504278 1.44321376 4.91710154
5.1748531 5.97179583 2.81318729 1.40920118 1.71971274 5.89584431
1.89762969 3.61530213 4.70938863 4.70465028 2.30987582 5.59536378
1.49727038 5.49813792 5.58454991 3.47186829 1.68183474 3.73772423
1.14737784 4.61825732 4.71591489 2.56337634 3.40702796 3.36296802
3.95713764 4.65193372 3.6744376 4.62099764 3.22665327 1.62373527
5.80160443 5.33384555 1.88645007 5.20456926 3.80141811 1.88067735
4.30304803 3.0247668 5.83551488 2.74172461 4.67710507 2.34487172
5.84004122 4.68232338 4.910449 3.18705904 2.08716649 1.1611888
3.67849771 1.60134135 1.69320599 4.14850715 1.27455152 3.90801531
5.76803138 5.89245909 5.33726146 3.04379411 3.9270988 5.45374029
4.62159742 3.94287214 1.52019829 5.69284284 3.54999855 4.67422153
4.88264712 1.41853589 1.57703145 2.32699049 3.33749936 5.60994739
4.80452334 1.75350137 1.48515979 5.56670469 5.77124504 3.34758006
4.20972043 2.98818786 3.6109789 1.68101437 4.82218883 5.24008807
5.28082068 1.33095817 4.03735189 1.42041222 2.20414765 5.39257946
5.31719641 1.87693392 5.63453721 3.95779077 3.94646669 1.61809152
3.33770623 2.98967513 3.25597251 2.46161009 1.46135421 5.23019758
2.18322483 1.79118287 2.46541749 4.78323152 3.66050291 3.57520729
2.44211427 1.23245359 2.56225845 5.65833786 2.77928312 3.28810098
4.63490075 2.88487005 3.10325663 4.28229613 5.30794877 5.09065826
3.43518992 3.27372701 5.78191763 5.85248077 5.52191919 5.28672025
4.56701151 5.44180564 2.98333716 4.35470901 3.14979693 5.28504568
4.01783082 5.12910779 3.92089422 5.32909624 1.13355747 1.72807971
2.13690501 3.0681371 2.11666575 1.96385739 4.59527295 1.21320012
1.44082527 2.07450103 4.58436793 3.81108586 2.80284141 3.48430033
5.44642483 2.81217899 3.22297305 3.79104866 3.53853192 1.67539527
2.71902547 2.37307436 1.34636436 2.69180455 5.68034445 1.97773791
1.38256154 4.96437148 3.16303809 5.96074567 2.54196531 5.22873788
2.65395453 4.63279673 2.72181565 1.35413687 2.01816271 2.90503671
4.40309464 4.0586675 3.67261185 1.84368135 5.83149644 4.8885055
3.53671264 5.93318369 5.17530596 4.93027548 1.80363346 4.05891107
1.89818363 2.06977187 2.30226821 4.15204174 1.75907264 2.33623509
2.78054852 3.82548442 2.02957145 2.11709874 4.83192585 4.07934737
1.26151164 2.10855015 2.01520983 5.2291843 3.60979518 2.11770546
2.95964883 5.70089234 4.56805913 1.26911838 2.59435731 5.89779923
3.19881224 3.41536703 5.54352684 4.2532888 3.44845498 2.92200289
5.90466946 2.47311602 1.25167654 2.37593779 4.74803637 3.57521505
5.87097792 4.55117214 5.70820461 3.91278036 3.1784911 4.46459614
5.39105243 1.08751302 1.58966354 1.58156654 2.82860914 3.48423615
5.00538343 5.77112908 4.82247557 5.86483228 5.06675108 1.54990086
1.22403947 1.07565912 2.64155632 4.08986119 3.40188237 4.40470982
3.14046596 3.94706631 5.23728119 5.63358661 5.98738928 1.6431731
1.50658404 5.21177277 3.48543077 5.29456771 2.14012027 1.05388799
3.13925773 4.91457568 2.08818632 3.04218007 3.60144225 4.8309165
1.78636457 1.23204338 4.88061658 3.34608076 4.45900648 2.6091534
3.98618698 3.67210812 5.90451772 3.36513467 2.39720468 3.96782346
3.40631427 2.54240788 1.10643565 4.87858155 3.64190818 3.13689707
1.32948812 2.88699104 3.09238817 2.67727771 5.37476488 5.01575504
3.53605713 1.81668487 5.05212458 3.60985923 4.37515115 2.33348853
4.97133565 5.66595875 1.9816279 2.02764546 3.3719821 3.33653345
5.72610191 4.35759524 4.71908071 5.84953522]
棒の数6でヒストグラム描画を行います。
import numpy as np
s = np.random.uniform(1,6,1000)
import matplotlib
%matplotlib inline
matplotlib.pyplot.hist(x, bins=6)
(array([ 171., 145., 189., 164., 155., 176.]),
array([ 1.01715776, 1.84730943, 2.6774611 , 3.50761277, 4.33776444,
5.16791611, 5.99806778]),
<a list of 6 Patch objects>)
random.uniform
と同様でだいたい、6分の1 で分布しているように思います。
scipy.stats.uniform を使う
random.uniform
、numpy.random.uniform
は一様分布に従う、数値、配列を生成するのみの機能ですが、scipy.stats.uniform
は、確率密度関数等の出力が可能です。
scipy.stats.uniform — SciPy v1.1.0 Reference Guide のコードを参考にサイコロをイメージしてグラフを出力してみます。
from scipy.stats import uniform
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
# uniform.ppf(0.01, loc=1.0, scale=6.0)を下限、uniform.ppf(0.99, loc=1.0, scale=6.0)を上限とする
# 線形に等間隔な数列を生成する。
x = np.linspace(uniform.ppf(0.01, loc=1.0, scale=6.0), uniform.ppf(0.99, loc=1.0, scale=6.0), 100)
# 確率密度を出力
print(uniform.pdf(x,loc=1, scale=6))
# 一様分布確率密度関数をplot
ax.plot(x, uniform.pdf(x,loc=1, scale=6),'r-', lw=5, alpha=0.6, label='uniform pdf')
# rv_continuousクラスのインスタンスを取得
# 固定型統計分布: frozen RV 参考:https://future-chem.com/scipy-stats-dist/
rv = uniform(loc=1.0, scale=6.0)
# numpy.random.uniform のような配列を生成する
r = uniform.rvs(loc=1.0, scale=6.0, size=1000)
# 固定型統計分布: frozen RV に従う、確率密度関数をplot
ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
# ヒストグラム描画
ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
# 凡例表示
ax.legend(loc='best', frameon=False)
# グラフ表示
plt.show()
[ 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667
0.16666667 0.16666667 0.16666667 0.16666667]
グラフ が 7 とこまで描画されるのは、スケールに6
を指定しているからだと思います。
一応さいころの確率を示す グラフ は出力できたかと思います。
参考
- 線形に等間隔な数列を生成するnumpy.linspace関数の使い方 - DeepAge
- random — 擬似乱数を生成する — Python 3.7.1 ドキュメント
- 一様乱数の生成 - 人工知能に関する断創録
- Numpy Uniform | plotly
- numpy.random.uniform — NumPy v1.15 Manual
- scipy.stats.uniform — SciPy v1.1.0 Reference Guide
- Scipyの統計モジュールstatsで統計分布を使いこなす
以上です。
コメント