Python入門 Numpy基礎②

はじめに

本記事は、前回の「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])