NumPy random.RandomState.randn() の使い方とサンプルコード
NumPy の Random sampling に関連する random.RandomState.randn() の詳細解説
この関数は、統計シミュレーション、機械学習、データ分析など、様々な分野でランダムな値を生成するために使用されます。
randn() の使い方
randn()
は、以下の引数を受け取ります。
- size: 生成する乱数の形状を指定します。省略すると、スカラー値が生成されます。
- d0, d1, ..., dn: 配列の形状を指定する省略形です。
size
と同じ意味です。
例:
# スカラー値を生成
np.random.randn()
# 3x3 の配列を生成
np.random.randn(3, 3)
# (5, 4, 2) の配列を生成
np.random.randn(5, 4, 2)
randn()
は、指定された形状の配列を返し、各要素は標準正規分布に従う乱数で満たされます。
例:
>>> np.random.randn(3, 3)
array([[ 0.12345678, 0.87654321, -0.12345678],
[ 0.87654321, 0.12345678, 0.12345678],
[-0.12345678, -0.12345678, 0.87654321]])
randn() と rand() の違い
NumPy には、randn()
の他に rand()
という関数も存在します。rand()
は、0から1までの範囲の一様乱数を生成します。
randn()
と rand()
の主な違いは以下の通りです。
- 分布:
randn()
は標準正規分布に従う乱数を生成し、rand()
は一様分布に従う乱数を生成します。 - 用途:
randn()
は統計シミュレーションなど、正規分布に従う値が必要な場合に使用されます。rand()
は、ランダムな値を生成したい場合に汎用的に使用されます。
randn() の応用例
- 統計シミュレーション: 標準正規分布に従う乱数を生成することで、様々な確率現象をシミュレーションできます。
- 機械学習: データの正規化や、ランダムな初期値の生成などに使用されます。
- データ分析: データの分布を分析したり、外れ値を検出したりする際に使用されます。
補足
randn()
は、擬似乱数と呼ばれる乱数を生成します。擬似乱数は、真の乱数ではないものの、統計的な性質は真の乱数とほぼ同じです。randn()
は、デフォルトでランダムなシード値を使用して乱数を生成します。シード値を固定することで、同じ乱数を再現することができます。- NumPy 1.17 以降では、
random.Generator
クラスを使用して乱数を生成することが推奨されています。random.Generator
クラスは、より多くの機能と柔軟性を提供します。
その他
NumPy random.RandomState.randn() サンプルコード
スカラー値の生成
# スカラー値を生成
randn_value = np.random.randn()
print(f"randn_value: {randn_value}")
randn_value: 0.87654321
配列の生成
# 3x3 の配列を生成
array_3x3 = np.random.randn(3, 3)
print(f"array_3x3:\n{array_3x3}")
# (5, 4, 2) の配列を生成
array_5x4x2 = np.random.randn(5, 4, 2)
print(f"array_5x4x2:\n{array_5x4x2}")
出力例:
array_3x3:
[[-0.12345678 0.87654321 -0.12345678]
[ 0.87654321 0.12345678 0.12345678]
[-0.12345678 -0.12345678 0.87654321]]
array_5x4x2:
[[[ 0.12345678 -0.12345678]
[ 0.87654321 0.12345678]
[ 0.12345678 0.87654321]
[ 0.87654321 -0.12345678]]
[[ 0.12345678 0.87654321]
[-0.12345678 0.12345678]
[ 0.87654321 0.12345678]
[ 0.12345678 0.87654321]]
[[ 0.87654321 -0.12345678]
[ 0.12345678 0.87654321]
[-0.12345678 0.12345678]
[ 0.87654321 0.12345678]]
[[ 0.12345678 0.87654321]
[ 0.12345678 -0.12345678]
[ 0.87654321 0.12345678]
[ 0.12345678 0.87654321]]
[[ 0.87654321 0.12345678]
[-0.12345678 0.12345678]
[ 0.12345678 0.87654321]
[ 0.87654321 -0.12345678]]]
正規分布からのサンプリング
# 平均が0、標準偏差が1の正規分布から10個のサンプルを生成
samples = np.random.randn(10)
print(f"samples: {samples}")
# 平均が3、標準偏差が2.5の正規分布から10個のサンプルを生成
samples = 3 + 2.5 * np.random.randn(10)
print(f"samples: {samples}")
出力例:
samples: [-0.12345678 0.87654321 -0.12345678 0.87654321 -0.12
NumPy random.RandomState.randn() 以外の方法
random.normal()
は、randn()
と同様に標準正規分布に従う乱数を生成する関数です。randn()
との違いは、loc
と scale
という引数を使って、平均と標準偏差を指定できることです。
# 平均が3、標準偏差が2.5の正規分布から10個のサンプルを生成
samples = np.random.normal(loc=3, scale=2.5, size=10)
print(f"samples: {samples}")
出力例:
samples: [3.12345678 5.87654321 2.87654321 5.12345678 2.87654321
4.87654321 3.12345678 5.87654321 2.87654321 5.12345678]
random.multivariate_normal()
は、多変量正規分布に従う乱数を生成する関数です。多変量正規分布とは、複数の変数が同時に従う正規分布です。
# 平均ベクトルが(3, 2)、共分散行列が[[1, 0.5], [0.5, 1]]の多変量正規分布から10個のサンプルを生成
mean = np.array([3, 2])
cov = np.array([[1, 0.5], [0.5, 1]])
samples = np.random.multivariate_normal(mean, cov, size=10)
print(f"samples: {samples}")
出力例:
samples: [[3.12345678 2.87654321]
[5.87654321 2.12345678]
[2.87654321 1.87654321]
[5.12345678 2.87654321]
[2.87654321 2.12345678]
[4.87654321 3.87654321]
[3.12345678 2.87654321]
[5.87654321 2.12345678]
[2.87654321 1.87654321]
[5.12345678 2.87654321]]
自分で関数を作る
Box-Muller法などの手法を用いて、自分で標準正規分布に従う乱数を生成する関数を作ることができます。
def box_muller(u1, u2):
z1 = np.sqrt(-2 * np.log(u1)) * np.cos(2 * np.pi * u2)
z2 = np.sqrt(-2 * np.log(u1)) * np.sin(2 * np.pi * u2)
return z1, z2
# 0から1までの範囲の一様乱数
u1 = np.random.rand()
u2 = np.random.rand()
# Box-Muller法で標準正規分布に従う乱数を生成
z1, z2 = box_muller(u1, u2)
print(f"z1: {z1}")
print(f"z2: {z2}")
出力例:
z1: 0.87654321
z2: -0.12345678
- 平均と標準偏差を指定したい場合は、
random.normal()
を使うのが
Pythonプログラマー必見!NumPy static ma.MaskedArray.__new__(): データ分析をレベルアップ
static ma. MaskedArray. __new__() は、ma. MaskedArray オブジェクトを作成するための静的メソッドです。このメソッドは、データ、マスク、およびオプションのデータ型を指定して、新しい ma. MaskedArray オブジェクトを作成します。
NumPy C-API: void PyUFunc_e_e_As_d_d() の詳細解説とサンプルコード集
関数概要引数: op: 要素ごとの演算を表すポインタ arrays[0]: 最初の入力配列 arrays[1]: 2 番目の入力配列 out[0]: 最初の出力配列 out[1]: 2 番目の出力配列 N: 入力配列の長さ op_dtypes: 入力と出力のデータ型 strides: 各配列のストライド (メモリ上の要素間の距離)
void PyUFunc_O_O() 関数で実現するオブジェクト型入力のユニバーサル関数
入力と出力バッファの確保: 関数は、入力と出力データを格納するためのメモリ領域を確保します。入力データの型変換: 関数は、入力オブジェクトの型を、対応する NumPy 型に変換します。ユニバーサル関数の呼び出し: 関数は、指定されたユニバーサル関数を、変換された入力データを使用して呼び出します。
PyArray_ITER_RESET() を使ったサンプルコード: 実践で学ぶイテレータ操作
イテレータは、配列などのデータ構造を要素ごとに順にアクセスするための仕組みです。 NumPy では、PyArray_IterNew() 関数を使ってイテレータを作成できます。PyArray_ITER_RESET() は、すでに作成済みの イテレータを最初の要素に戻します。 イテレータを使い始めて、途中で別の処理を挟んだり、イテレータを別の要素に移動したりした場合、PyArray_ITER_RESET() を使って最初に戻ることができます。
NumPy C-API を用いたメモリ管理: void PyDimMem_FREE() 関数を中心に
void PyDimMem_FREE() は、NumPy C-API におけるメモリ管理関数の一つで、NumPy 配列のメモリ割り当てを解除します。機能NumPy 配列が保持するメモリブロックを解放します。配列がヌルポインタの場合は無効です。
PythonでNumPy配列の真偽値を判定: np.all() と PyArray_All()
PyArray_All() は、NumPy C-API における重要な関数の一つで、配列内のすべての要素が真であるかどうかを判定します。真偽値は、論理積演算 (&) を要素ごとに適用した結果と等しくなります。関数宣言引数array: 入力配列
distutils.ccompiler_opt.new_ccompiler_opt() のサンプルコード
この関数は、NumPy のインストール時に C コンパイラに渡されるオプションを指定するために使用されます。 これらのオプションは、NumPy のビルドプロセスをカスタマイズしたり、特定のプラットフォームやコンパイラに合わせたりするために使用されます。
NumPy Masked Array Operations: ma.is_mask() 関数でマスクされた要素を特定する
ma. is_mask() は、入力配列の各要素がマスクされているかどうかを判断し、True または False の値を返す関数です。この関数は、以下の条件に基づいて動作します。入力配列が Masked Array の場合: 各要素がマスクされているかどうかを個別に判断します。 マスクされている要素には True、そうでない要素には False を返します。
NumPyで3次元空間における多項式計算: polynomial.hermite_e.hermeval3d() 関数の詳細解説
polynomial. hermite_e. hermeval3d() は、3次元空間におけるエルミート多項式 He_n(x, y, z) の値を計算する NumPy 関数です。この関数は、3次元空間における点 (x, y, z) における多項式の値を、与えられた次数 n と係数ベクトル c を用いて計算します。
PyArray_EMPTY() 関数 vs PyArray_Zeros() 関数: 空のNumPy配列作成時の違い
PyArray_EMPTY() は、指定された形状とデータ型を持つ空の NumPy 配列を作成します。この関数は以下の情報を必要とします。ndim: 配列の次元数shape: 各次元の長さdtype: 配列のデータ型これらの情報を元に、メモリが割り当てられ、初期化された空の NumPy 配列が返されます。