NumPy:配列を作成する(zeros, ones, empty, full)

NumPy で配列を作成する方法はいくつかありますが、最も基本的なのが zerosonesemptyfull の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)  # 不定な値が表示される

zerosones より高速ですが、必ず後から値を代入する前提で使ってください。初期化を忘れるとバグの原因になります。

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 は特定の値で初期化したいとき

どの関数も (行, 列) のタプルで形状を指定できる点は共通しています。用途に合わせて使い分けてみてください。