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>)

png

だいたい、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>)

png

random.uniform同様でだいたい、6分の1 で分布しているように思います。


scipy.stats.uniform を使う

random.uniformnumpy.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]

png

グラフ が 7 とこまで描画されるのは、スケールに6指定しているからだと思います。
一応さいころの確率を示す グラフ は出力できたかと思います。


参考

以上です。

コメント