np.zeros
は、0で初期化されたndarrayを生成する関数です。NumPyの配列生成関数には様々な方法があるので、頭を悩ませるかもしれません。
本記事では、
-
np.zeros
の使い方 -
np.empty
、np.zeros_like
との違い
について紹介します。使い方をハッキリと理解するだけで、コードが格段に綺麗になるはずです。
np.zeros
np.zeros
は、関数の名前から想像できる通り、すべての要素を0
とする配列を生成するものです。APIドキュメント以下のようになっています。
numpy.zeros(shape, dtype = float, order = ‘C’, …, like=None)
params:
パラメータ名 | 型 | 概要 |
---|---|---|
shape |
intまたは intのタプル |
生成する配列のshape を指定します。 |
dtype |
dtype データ型 |
(省略可能)初期値float 生成される配列のshapeを指定します デフォルトは float となっています。 |
order |
‘C’または’F’ | (省略可能)初期値’C’C /F のいずれかを指定します。デフォルトはC 。ローメジャー(Cスタイル)かカラムメジャー(Fortranスタイル)でメモリ配置します。 |
like |
コレクション | NumPy配列以外の参照オブジェクトで生成します。__array_function__ プロトコルを継承しているオブジェクトを指定することができます |
returns:
指定されたshape
を持つ、0
を要素とするndarrayが返されます。
zeros
の引数には、第一引数に生成したい配列のshape
、第二引数にデータ型(デフォルトはfloat64
)、第三引数にorder
を指定します。第3引数はFortranのような順序を指定する場合に使われるものであまり使用されません。第4引数は配列に相当するものを指定します。また、今回のように要素が全て同じである場合、見た目上の違いは全くありません。
基本的な使い方
それでは、実際にコードで使い方を見ていきましょう。
np.empty
、np.zeros
との違い
np.empty
NumPyには初期化時に使う関数としてnp.empty
という関数があります。np.empty
の関数は要素が0になっていることは保証されません。なので、0で初期化する必要のない場合には高速になることがあるので、こちらを使用することをオススメします。
キャッシュが効かないように生成するshape
を変更して、実行速度を計測してみます。
np.empty
の方が3~4倍ほど高速ですね。
np.zeros_like
また、前述の関数の他にnp.zeros_like
という関数もあります。こちらは、以下のようなAPIドキュメントになっています。
numpy.zeros_like(a, dtype=None, order=’K’, subok=True, shape=None)
params:
パラメータ名 | 型 | 概要 |
---|---|---|
a |
array_like (配列に相当するもの) |
生成する配列のshape 、dtype を持つndarrayを指定します。 |
dtype |
dtype データ型 |
(省略可能)初期値None 結果のデータ型を上書きします。 |
order |
‘C’,’F’,’A’,’K’ のいずれか |
(省略可能)初期値’K’C /F /A /K のいずれかを指定します。デフォルトはK 。配列のデータの並べ方を指定します。K であれば出来る限り元の配列の並べ方を継承します。 |
subok |
bool値 | (省略可能)初期値True このオプションがTrueだった場合は、 a のサブクラスのデータ型でndarrayが生成されます。 |
shape |
intまたはintのシーケンス | 結果のshapeを上書きする。order=’K’かつ次元数が変更されない場合、順序を維持しようとする。 それ以外の場合はorder=’C’が適用される |
returns:
aと同様のshape
を持つ、0
を要素とするndarrayが返されます。
元の配列と同じ形状の配列を生成する
元のndarrayと同様のshapeを生成したいときに、以下のようなコードを書いている場合は、np.zeros_like
を使ったほうがスッキリするかもしれません。
このようなコードは、元のndarrayと同じshapeをもつ配列を生成することを目的として書いているはずなので、以下のようにnp.zeros_like
を使うことができます。