Menu
CoddyTech

乱数

CoddyのMachine Learningジャーニー「データとプロット」セクションの一部。レッスン 18/60。

シミュレーション、シャッフルされたデータ、未訓練のモデルは、どれも乱数から始まります。この1,000個の架空の身長は、1行で生成しました:

平均値の170 cm付近が最も高く、140と200に向かって裾が細くなる、ベル型の1,000個のランダムな身長のヒストグラム

NumPyはシードによって開始された乱数生成器からそれらを生成します。

rng = np.random.default_rng(42)
heights = rng.normal(170, 10, size=1000)
print(np.round(heights[:4], 1))
print(rng.integers(1, 7, size=5))
print(np.round(rng.random(3), 2))

これは次のように出力されます:

[173.  159.6 177.5 179.4]
[2 4 3 3 5]
[0.44 0.13 0.09]

normal(mean, std, size)は平均値の周りに集まります。integersはrangeと同様にstop値を含みません。randomは0から1までの小数を返します。

同じシードを使えば、どのコンピューターでも同じ数値が得られるので、誰でもあなたの実験を再現できます。抽選するたびに、生成器の状態が進みます。

challenge icon

チャレンジ

簡単

ある店が、再実行時に再現しなければならない1週間をシミュレートします。

  1. シードからrng_aを作成し、顧客数を7回、20から60まで(両端を含む)抽出してから、平均15、標準偏差4の正規分布から支出額を7回抽出します。
  2. 同じシードでrng_bから、またシードに1を加えた値でrng_cから、顧客数をもう一度抽出します。
  3. 以下のように出力します。支出額は小数第1位まで表示し、bとcがaと一致する日数を出力します。

シードが12の場合:

Customers: [45 30 59 58 22 27 28]
Spend: [21.5 10.2 12.5  9.7 14.6 19.  14.9]
Same seed, days that match: 7
Seed + 1, days that match: 1

自分で試してみよう

import numpy as np

seed = int(input())

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

データとプロットのすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ