【2026】Pythonで乱数を扱う方法は?random・NumPy・一様分布・正規分布・シードまで徹底解説

データ分析やシミュレーションの現場でPythonの乱数を扱う場合、標準ライブラリのrandomモジュールや数値計算に強いNumPyがよく利用されます。

この記事では、Pythonで乱数を扱う方法を基礎から丁寧に解説し、random・NumPyの使い方に加えて、一様分布・正規分布・シード値の仕組みまでまとめてご紹介します。

Pythonの乱数を正しく理解すれば、データ分析や開発の幅がさらに広がります。基礎を押さえて、Pythonをさまざまな場面で活用していきましょう。

Pythonの乱数とは?概要とよくある利用シーン

Pythonの乱数はプログラム内で予測しにくい値を生成するための仕組みで、Python標準ライブラリのrandomと数値計算に強いNumPyの二つの方法で扱えます。

Pythonの乱数はさまざまな分野で利用されており、特に次のようなシーンで活用の機会が多いです。

  • ゲームの敵出現やアイテム抽選などのランダム処理
  • データ分析におけるサンプリングやノイズ付与
  • 機械学習の重み初期化やデータ分割
  • モンテカルロ法などのシミュレーション全般

Python初学者にとっても、乱数は基礎文法を応用しながら理解を深められる題材であり、学習ステップの一つとして非常に有用です。乱数を学ぶ前にPythonの基礎を体系的に身につけたいという方は、Python基礎セミナー講習」で学習の土台を整えておくと良いでしょう

Python基礎セミナー講習はこちら

乱数の学習に入る前に「Pythonで何ができるか」を知りたいという方には、こちらの記事もおすすめです。

Pythonは何ができる?代表例5つやPythonを習得した後のおすすめキャリア

Pythonの標準ライブラリrandomで乱数を生成する方法

Pythonの標準ライブラリrandomで乱数を生成する方法

Pythonで乱数を扱う最も基本的な方法が、標準ライブラリのrandomモジュールを使う方法です。ここでは、Python初学者がまず押さえておきたいrandomモジュールの使い方をサンプルコードとともに解説します。

  1. ランダムな整数を生成する(randint/randrange)
  2. ランダムな小数を生成する(random/uniform)
  3. リストからランダムに選ぶ・シャッフルする(choice/shuffle)
  4. 複数の乱数をまとめて生成する(10個・100個)
  5. 重複なしの乱数を生成する

①ランダムな整数を生成する(randint/randrange)

Pythonで整数の乱数を生成する基本的な関数がrandintとrandrangeです。

【基本構文】
random.randint(a, b):a~b(両端含む) の整数を返す
random.randrange(stop):0~stop-1 の整数を返す
random.randrange(start, stop, step):start~stopからstep刻みで整数を返す

import random

print(random.randint(1, 6)) # 1〜6 の整数(サイコロ)
print(random.randrange(10)) # 0〜9 の整数
print(random.randrange(2, 10, 2)) # 2〜8 の偶数

Pythonのrandintは直観的に使いやすく、特に「サイコロ」「くじ引き」など明確な範囲の乱数生成に便利です。一方、randrangeはステップを指定できるため、偶数だけを出したい場合など柔軟性が高い関数といえます。

②ランダムな小数を生成する(random/uniform)

Pythonで小数の乱数を生成する際は、0~1の範囲を返すrandom()と、任意の範囲を指定できるuniform(a, b)を使います。数値計算のばらつきやシミュレーションなどで頻繁に利用されます。

【基本構文】
random.random():0以上1未満の小数
random.uniform(a, b):a~bの小数(範囲は両端を含む)

import random

print(random.random()) # 0〜1 の小数
print(random.uniform(1.0, 5.0)) # 1.0〜5.0 の小数

Pythonのrandom()は極めてシンプルで扱いやすく、多くの確率処理にそのまま使えます。一方でuniform()は任意の範囲を扱えるため、ゲーム内の座標生成や確率的な調整に向いています。

③リストからランダムに選ぶ・シャッフルする(choice/shuffle)

Pythonで複数の候補から1つを選んだりデータの並びをランダムに並べ替えたりしたい場合は、choiceとshuffleを利用します。抽選・カードゲームの実装・学習データの分割など、実務でもよく使われる関数です。

【基本構文】
random.choice(seq):seqから1要素をランダムに取得
random.shuffle(seq):seqの順序をランダムに並び替え(破壊的変更)

import random

items = [“apple”, “banana”, “orange”]print(random.choice(items)) # ランダムに1つ取得

numbers = [1, 2, 3, 4, 5]random.shuffle(numbers)
print(numbers) # 順番がランダムに入れ替わる

Pythonのchoiceは抽選やランダム選択に向き、軽量で使いやすい関数です。shuffleはリストをその場で入れ替えるため、順序に意味がある場合に役立ちます。

④複数の乱数をまとめて生成する(10個・100個)

乱数を1つずつ生成するのではなく、10個や100個といった複数の値をまとめて作りたいときは、Pythonのリスト内包表記を使うのが効率的です。サンプリングやテストデータ作成に役立ちます。

【基本構文】
[random.randint(a, b) for _ in range(n)]:整数乱数をn個生成
[random.random() for _ in range(n)]:小数乱数をn個生成

import random

ints = [random.randint(1, 100) for _ in range(10)] # 整数10個
floats = [random.random() for _ in range(100)] # 小数100個

print(ints)
print(floats[:5]) # 最初の5件だけ表示

Pythonのリスト内包表記を使えば、短いコードで大量の値を生成できます。試験データの作成やモンテカルロ法の準備など実践的な場面でも役立つため、覚えておくとPythonを活用した作業の効率が上がります。

⑤重複なしの乱数を生成する

Pythonで複数の値をランダムに取り出しつつ、同じ値を二度出したくない場合にはrandom.sample()を利用します。指定範囲から重複なしで複数の値を取得できるため、抽選・番号割り当て・一意なデータ作成に向いています。

【基本構文】
random.sample(seq, n):seq から重複なしでn個取り出す
random.sample(range(a, b), n):a~b-1の範囲から取得

import random

nums = random.sample(range(1, 101), 10) # 1〜100 から重複なしで10個
print(nums)

Pythonのsample()は重複を自動的に防いでくれるため、安全かつ短いコードで目的を達成できます。randintを繰り返して重複チェックする必要がなく、効率的に一意な乱数集合を作れるため、抽選やユニークID生成の初歩として覚えておくと便利です。

NumPyのrandomモジュールで乱数を扱う方法

NumPyのrandomモジュールで乱数を扱う方法

NumPyのrandomモジュールは、Pythonで大量の乱数生成や数値計算を効率的に行いたい場合に最適なツールです。ここでは、Pythonの代表的なライブラリであるNumPyの乱数の基本構文から応用的な使い方まで順に確認していきましょう。

  1. numpy.randomの特徴と使い方
  2. NumPyで大量の乱数を生成する(10個・100個・10000個も)
  3. NumPyで重複なしの乱数を生成する
  4. Python標準ライブラリ(random)との違い

①numpy.randomの特徴と使い方

NumPyの乱数は、配列(ndarray)単位で大量の値を高速に生成できる点が最大の強みです。単一の値だけでなくベクトルや行列として出力できるため、Pythonのデータ生成や機械学習の前処理でも頻繁に利用されます。

【基本構文】
np.random.rand(n):0~1の小数をn個
np.random.randint(low, high, size):整数をsize個
np.random.normal(loc, scale, size):正規分布の乱数をsize個

import numpy as np

ints = np.random.randint(0, 100, size=10) # 整数
floats = np.random.rand(5) # 小数
print(ints, floats)

このようにNumPyでは、sizeを指定するだけで複数の乱数を一括で生成できます。Python標準ライブラリのrandomではループが必要な処理も、NumPyなら1行で書けるため、扱いやすさと速度の両面でメリットが大きいライブラリです。

②NumPyで大量の乱数を生成する(10個・100個・10000個も)

NumPyの最大の強みは、10個・100個・10000個といった大量の乱数を一度に生成できる点です。ベクトル化された処理により、Python標準ライブラリのrandomより圧倒的に高速に実行できます。

import numpy as np

print(np.random.rand(10)) # 小数10個
print(np.random.randint(0, 100, 100)) # 整数100個
large = np.random.rand(10000) # 小数10000個
print(large[:5])

大量のデータ生成は、統計シミュレーションやモデルのテストなどで頻繁に発生します。NumPyではループを使わず高速に処理できるため、大規模データを扱う場面で役立ちます。

③NumPyで重複なしの乱数を生成する

NumPyでは、np.random.choice()を使うことで、重複なしの乱数を手軽に生成できます。Python標準ライブラリのrandomモジュールのsample()に相当する機能で、大規模なデータでも高速に動作します。

【基本構文】
np.random.choice(n, size, replace=False):0~n-1 から重複なしで取得
np.random.choice(seq, size, replace=False):任意の配列から取得

import numpy as np

nums = np.random.choice(100, 10, replace=False)
print(nums)

replace=Falseを指定することで、同じ値が重複しないよう制御できます。NumPyはPythonの配列処理に最適化されているため、多くの値を一度に抽出する場面で特に効率的です。

④Python標準ライブラリ(random)との違い

NumPyの乱数とPython標準ライブラリ(random)の主な違いは、速度・配列処理・機能の豊富さの3点です。特に大量の乱数生成ではNumPyが圧倒的に高速で、行列単位の生成や多様な分布への対応など、分析向けの機能が揃っています。

NumPyとPython標準ライブラリ(random)の違いをまとめました。

項目Python標準ライブラリ(random)NumPy(numpy.random)
主な用途軽いランダム処理・日常的なスクリプトデータ分析・機械学習・大量計算
速度遅め(ループが必要)非常に高速(ベクトル化処理)
複数生成for文や内包表記が必要size指定で一括生成
配列の扱いリストのみ、行列生成は自前で作成ndarray として行列も一括生成
インストール不要(標準搭載)NumPyの導入が必要
向いているユーザー初心者・軽い処理をしたい人分析者・研究者・MLエンジニア

データ分析や機械学習など大量データを扱う場面ではNumPy、軽い処理はPython標準ライブラリのrandomを使うといった形で、用途に応じて使い分けることが重要です。

PythonのNumPyについては、こちらで詳しく解説しています。併せて参考にしてください。

Pythonでの機械学習プログラミングの必需品!Pythonをより便利に使うための必須ライブラリを紹介!

Pythonで扱える主要な乱数分布:一様分布と正規分布

Pythonで扱える主要な乱数分布:一様分布と正規分布

Pythonで乱数を扱う際には、単に整数や小数をランダムに生成するだけでなく、特定の分布に従う乱数を使う場面があります。ここでは、Pythonの乱数の中でも特に利用頻度が高い「一様分布」と「正規分布」の基本について解説します。

  1. Pythonの一様分布の乱数
  2. Pythonの正規分布の乱数
  3. 一様分布と正規分布の乱数の違い

①Pythonの一様分布の乱数

一様分布の乱数は、「どの値も同じ確率で選ばれる」という特徴を持つシンプルな乱数分布です。Pythonではrandom.uniform()やnp.random.uniform()で生成でき、サイコロやくじ引きのように偏りなくランダムに値を選びたいときに利用します。

import random
import numpy as np

print(random.uniform(0, 1)) # 0〜1の一様乱数
print(np.random.uniform(0, 1, 5)) # 5個まとめて生成

Python標準ライブラリのuniform()は任意の範囲から値を等確率で取り出すため、ゲーム中のランダム移動や初期値のランダム化などに向いています。またNumPyを使えば、サイズを指定して大量の一様乱数を一括生成でき、シミュレーションやデータ生成でも役立ちます。

②Pythonの正規分布の乱数

正規分布(ガウス分布)は平均値の周囲にデータが集まり、極端に離れた値が出にくい特徴を持つ分布です。Pythonではrandom.gauss()やnp.random.normal()が用いられ、データ分析や機械学習の分野で頻繁に利用されています。

import random
import numpy as np

print(random.gauss(0, 1)) # 平均0, 標準偏差1
print(np.random.normal(0, 1, 5)) # 5個の正規乱数

正規分布は自然なばらつきを再現するときに便利で、モデルのノイズ生成、データの模擬作成、機械学習の重み初期化など幅広い用途があります。NumPyを使うと配列単位で高速に生成でき、実務でも欠かせない機能となっています。

③一様分布と正規分布の乱数の違い

一様分布と正規分布は用途が明確に異なります。どちらを使うべきか判断しやすいよう、特徴を比較表にまとめました。

項目一様分布正規分布
特徴すべての値が同じ確率で出る分布平均付近が最も出やすい山型の分布
出やすい値均等平均値の周辺
用途サイコロ、抽選、ランダム位置決定ノイズ生成、データ分析、ML初期化
Python関数(標準)random.uniform(a, b)random.gauss(mu, sigma)
Python関数(NumPy)np.random.uniform(a, b, size)np.random.normal(mu, sigma, size)

一様分布と正規分布はPythonで乱数を扱う上でよく登場する基礎概念なので、表を参考にしながら「どんな場面で使うのか」を少しずつ掴んでいきましょう。

Pythonの乱数におけるシード(seed)値の使い方

Pythonの乱数におけるシード(seed)値の使い方

乱数は毎回異なる値が出ることが特徴ですが、プログラムによっては「同じ乱数列を再現したい」場面があり、そのために利用されるのがシード(seed)値です。ここではPythonにおけるシードの基本概念と使い方を具体例とともに紹介します。

  1. 乱数のシード値とは
  2. 乱数のシード値はどんな場面で必要?

①乱数のシード値とは

コンピュータが生成する乱数は、計算式によって作られる「疑似乱数」であり、完全なランダムではありません。この計算のスタート地点(種)となる数値のことを「シード値」と呼びます。

シード値には、「同じ値を設定すれば、必ず同じ乱数の並びが生成される」という重要な性質があります。通常、Pythonでは現在時刻などを基に自動で設定されますが、明示的に固定することも可能です。

Pythonでシード値を設定するには、random.seed()かnp.random.seed()を利用します。どちらも整数を指定することで、乱数生成のシード値を固定できます。

import random

random.seed(0)
print([random.random() for _ in range(3)])

上のPythonコードでは、実行するたびに同じ3つの値が出力されます。値そのものが固定されているのではなく、同じ「並び」が再現されている点がポイントです。

②乱数のシード値はどんな場面で必要?

Pythonでシード値の設定が必要になるのは、「誰がいつ実行しても同じ結果を再現できること」が求められる場面です。

処理に乱数が含まれると実行のたびに結果が変わるため、比較や検証が難しくなることがあります。そこでシード値を固定し、乱数の並びを統一することで再現性を確保するのです。

具体的には、主に次のケースで重要になります。

  • 機械学習・データ分析(データを学習用とテスト用に分割するとき)
  • バグ修正・デバッグ(エラーが起きた状況を正確に再現したいとき)

このように「運任せ」の要素を排除し、公平で確実な検証を行うためにシード値が活用されます。

乱数の理解を深めたいなら「Python基礎セミナー講習」

Python基礎セミナー講習

Pythonの乱数の仕組みを正しく理解するためには、変数・関数・データ型といった基礎文法だけでなく、Pythonの豊富なライブラリの扱い方やデータ処理の流れを押さえておくことが欠かせません。こうした基礎をまとめて身につけたい方におすすめなのが、「Python基礎セミナー講習です。

Pythonの基本文法からスクレイピング、データ分析、Excel処理の自動化、AIの基礎まで、実務で役立つ内容を短期間で効率よく学べます。独学では時間がかかりやすいポイントも体系的に整理できるため、Python初心者が最短ルートでスキルを伸ばしたいときに特に効果的です。

Pythonの基礎をしっかり固めてステップアップしたい方は、受講を検討してみてはいかがでしょうか。

セミナー名Python基礎セミナー講習
運営元GETT Proskill(ゲット プロスキル)
価格(税込)27,500円〜
開催期間2日間
受講形式対面(東京・名古屋・大阪)・ライブウェビナー・eラーニング

Python基礎セミナー講習はこちら

Pythonの乱数の使い方をマスターしよう

Pythonで乱数を扱う方法は、標準ライブラリのrandomからNumPyまで幅広く用意されており、整数・小数の生成、分布に基づく乱数、シードによる再現性の確保など多様な活用が可能です。

用途に応じて適切な関数を選べるようになると、ゲーム開発やデータ分析、シミュレーションなど実務での応用の幅が大きく広がります。

基礎を身につければより高度な処理にも挑戦できるので、学んだ知識を活かしてPythonで新たな一歩を踏み出しましょう。

最新情報をチェックしよう!