NumPy で配列を作成する方法はいくつかありますが、最も基本的なのが zeros、ones、empty、full の4つの関数です。それぞれ用途が異なりますので、順番に見ていきましょう。
zeros:ゼロで埋めた配列
np.zeros() は、すべての要素が 0 の配列を作成します。初期化された配列が必要なときによく使います。
import numpy as np # 1次元配列(要素数5) a = np.zeros(5) print(a) # [0. 0. 0. 0. 0.] # 2次元配列(3行4列) b = np.zeros((3, 4)) print(b) # [[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]]
デフォルトでは float64 型になりますが、dtype 引数で型を指定できます。
# 整数型で作成 c = np.zeros(5, dtype=int) print(c) # [0 0 0 0 0]
ones:1で埋めた配列
np.ones() は、すべての要素が 1 の配列を作成します。使い方は zeros と同じです。
# 1次元配列 a = np.ones(5) print(a) # [1. 1. 1. 1. 1.] # 2次元配列(2行3列) b = np.ones((2, 3)) print(b) # [[1. 1. 1.] # [1. 1. 1.]]
定数倍した配列が欲しいときは、ones に数値を掛けると便利です。
# すべて5の配列 fives = np.ones(4) * 5 print(fives) # [5. 5. 5. 5.]
empty:未初期化の配列
np.empty() は、メモリだけ確保して中身を初期化しない配列を作成します。そのため、中には不定な値(以前のメモリの残骸)が入っています。
a = np.empty(5) print(a) # 不定な値が表示される
zeros や ones より高速ですが、必ず後から値を代入する前提で使ってください。初期化を忘れるとバグの原因になります。
full:任意の値で埋めた配列
np.full() は、指定した値で埋めた配列を作成します。第1引数に形状、第2引数に埋める値を渡します。
# すべて7の配列 a = np.full(5, 7) print(a) # [7 7 7 7 7] # 2次元配列をπで埋める b = np.full((2, 3), np.pi) print(b) # [[3.14159265 3.14159265 3.14159265] # [3.14159265 3.14159265 3.14159265]]
使い分けのまとめ
zeros / ones
初期値として 0 や 1 が欲しいとき。計算の起点として使うことが多い
empty / full
empty は速度重視で後から値を入れるとき。full は特定の値で初期化したいとき
どの関数も (行, 列) のタプルで形状を指定できる点は共通しています。用途に合わせて使い分けてみてください。