Generator.zipf – ジップ分布から乱数配列を作成する方法

Generator.zipfは、ジップ分布(ジフ分布)から乱数配列を生成するジェネレータメソッドです。

ジップ分布は、ゼータ分布としても知られる連続確率分布であり、ジップの法則(出現頻度が k 番目に大きい要素が全体に占める割合は1/kに比例するという経験則)を満たす分布です。

このページではジップ分布から乱数配列を生成するGenerator.zipfについて解説します。

目次

1. 書式

Generator.zipf

書き方:

Generator.zipf(a, size=None)

パラメーター:

a: float or array_like of floats
分布のパラメータ(>1)
size: int or tuple of ints, optional
出力する配列のshape。(m, n, k)を渡すと、shape(m, n, k)の乱数配列を生成する。デフォルト値Noneで、aがスカラーの場合は1つの乱数の値を返す。それ以外の場合はnp.array(a).sizeの乱数配列を返す。

戻り値: 

out: ndarray or scalar
パラメータを設定したジップ分布から乱数配列を生成。

Notes

ジップ分布の確率密度関数は次の通りです。

分母の記号は、リーマンゼータ関数です。

2. サンプルコード

それでは、サンプルコードを見ていきましょう。

まずは、random.default_rng コンストラクタでジェネレータオブジェクトを作成します。『numpy.random.default_rng – 乱数生成のためのジェネレータオブジェクトの作成』に目を通しておいてください。

In [1]:
import numpy as np
rng = np.random.default_rng()
rng
Out[1]:
Generator(PCG64) at 0x7FA320387E58

こうして作成したジェネレータオブジェクト rng に対して、Generator.zipfを呼び出すことによって、ジップ分布から乱数配列を取得することができます。

In [2]:
rng.zipf(2., 5)
Out[2]:
array([2, 1, 2, 1, 1])

確率密度関数とともにヒストグラムを描いてみましょう。見やすくするために、乱数の値が50以下のものだけでプロットしています。

In [3]:
a = 2.
s = rng.zipf(a, 1000)

import matplotlib.pyplot as plt
from scipy import special  

count, bins, ignored = plt.hist(s[s<50],
        50, density=True)
x = np.arange(1., 50.)
y = x**(-a) / special.zetac(a)  
plt.plot(x, y/max(y), linewidth=2, color='r')  
plt.show()

3. まとめ

以上、Generator.zipfはジップ分布から乱数配列を生成するジェネレータメソッドです。

以前は、numpy.random.zipf関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。

Python初心者におすすめのプログラミングスクール

「未経験からでもPythonを学べるプログラミングスクールを探しているけど、色々ありすぎてわからない」なら、次の3つのプログラミングスクールから選んでおけば間違いはありません。

Aidemy Premium:全くの初心者ができるだけ効率よく短期間で実務的に活躍できるAI人材になることを目的とした講座。キャリアカウンセリングや転職エージェントの紹介などの転職支援も充実しており、受講者の転職成功率が高い。

AIジョブカレPythonの基本をおさえた人が、実際に機械学習やディープラーニングを活用できるようになるための講座。転職補償型があるなどキャリア支援の内容が非常に手厚く、講師の質も最高クラス。コスパ最高。Python初心者用の対策講座もある。

データミックスプログラミング経験者のビジネスマンが、更なるキャリアアップのためにデータの処理方法を学んでデータサイエンティストになるための講座。転職だけでなく起業やフリーランスとして独立する人も多い。Python初心者用の対策講座もある。

特に、あなたが以下のような目標を持っているなら、この中から選んでおけば間違いはないでしょう。

・未経験からPythonエンジニアとして就職・転職したい
・AIエンジニアやデータサイエンティストとしてキャリアアップしたい
・起業やフリーランスを視野に入れたい

理由は「Python初心者のためのおすすめプログラミングスクール3選」で解説しています。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる