はじめに
本記事は、前回の「Numpy基礎①」の続きです。
今回は、配列の生成や乱数の生成を中心に記述します。内容に関しては、目次を参照して下さい。
便利な配列生成
np.arange
範囲を指定して、配列を生成します。
# 1から9まで1刻みで配列を生成
np.arange(1, 10)
# array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 1から10の1つ手前まで2刻みで配列を生成
np.arange(1, 10, 2)
# array([1, 3, 5, 7, 9])
np.zeros
全ての要素が0である配列を生成します。
# 3×3の行列を生成
np.zeros([3, 3])
# array([[0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.]])
np.zeros_like
指定した配列を同じ形状の零行列を生成します。
array = np.array([[1, 2], [3, 4], [5, 6]])
array.shape
# (3, 2)
np.zeros_like(array)
# array([[0, 0],
# [0, 0],
# [0, 0]])
np.ones
全ての要素が1である配列を生成します。
np.ones([3, 3])
# array([[1., 1., 1.],
# [1., 1., 1.],
# [1., 1., 1.]])
np.ones_like
指定した配列と同じ形状の、全ての要素が1である配列を生成します。
array = np.array([[1, 2], [3, 4], [5, 6]])
array.shape
# (3, 2)
np.ones_like(array)
# array([[1, 1],
# [1, 1],
# [1, 1]])
np.eye
単位行列を生成します。
np.eye(3)
# array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
# kの値に応じて、1の位置が変化します
np.eye(3, 5, k = -1)
# array([[0., 0., 0., 0., 0.],
# [1., 0., 0., 0., 0.],
# [0., 1., 0., 0., 0.]])
np.linspace
指定した範囲を等間隔で分割した配列を生成
# 0から10までを11分割した配列を生成
array = np.linspace(0, 10, 11)
array
# array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
乱数の生成
乱数の生成には、主にrandn, rand, randintのいずれか使います。
- randn: 標準正規分布(平均0,分散1.0)にしたがって乱数を生成
- rand: 0.0から1.0までの範囲で乱数を生成
- randint: 指定した範囲の整数をランダムに抽出
また、生成する乱数を固定するためには、np.random.seed()を指定します。
np.random.randn
np.random.seed(0)
a = np.random.randn(1000)
import matplotlib.pyplot as plt
plt.hist(a, bins = 30)
plt.show()
Matplotlibでヒストグラムを描画すると、正規分布の形状を確認することができます。

np.random.rand
np.random.rand(10, 3)
'''
array([[0.82190391, 0.70052862, 0.8830776 ],
[0.96657511, 0.77474761, 0.99423308],
[0.61476989, 0.0371296 , 0.01425152],
[0.34210388, 0.82347172, 0.86613471],
[0.96081253, 0.06512147, 0.04457111],
[0.9132836 , 0.3050467 , 0.5579874 ],
[0.98244488, 0.40044853, 0.6658714 ],
[0.40087956, 0.76819466, 0.52771473],
[0.23752314, 0.2713061 , 0.25805921],
[0.53232033, 0.70318902, 0.9492799 ]])
'''
np.random.randint
np.random.randint(0, 100, 10)
# array([92, 14, 14, 80, 99, 63, 43, 27, 87, 20])