NumPyでは初期化配列(ndarray)を生成する関数が複数用意されています。大きく分けて以下の4つです。
それぞれ、どの値で初期化するのかが異なります。ここではこれらの関数の使い方について簡潔に確認していきます。配列の初期化はよく行う操作の一つなので覚えておきましょう。
1. 要素の値が0の初期化配列を生成
np.zeros
関数
要素の値が0の初期化配列を生成するには、np.zeros
関数を使います。引数には、生成する配列のshapeを指定します。
import numpy as np
np.zeros((2, 3))
デフォルトでは、生成される配列のデータ型はfloat64ですが、オプション引数で変更することが可能です。詳しい使い方は以下で解説しています。
np.zeros_like
関数
もう一つ、np.zeros_like
関数があります。この関数は、既存の配列の属性(形状やデータ型など)を引き継いだ上で、要素の値が0の新しい配列を生成します。
例えば、以下のコードでは元の配列の形状(2×3)とデータ型(int)を引き継いで、要素のみ初期化していることがわかります。
import numpy as np
x = np.arange(6).reshape(2, 3)
np.zeros_like(x)
この他、メモリレイアウトやサブクラスなどの属性も引き継ぎますので、とても便利です。以下のページでより詳しく解説しています。
2. 要素の値が1の初期化配列を生成
np.ones
関数
要素の値が1の初期化配列を生成するには、np.ones
関数を使います。np.zeros
関数と同じく、引数には生成する配列のshapeを指定します。これはすべての関数で共通です。
import numpy as np
np.ones((2, 3))
このようにデフォルトでは、データ型は浮動小数点数(float64)です。詳しい使い方は以下のページで解説しています。
np.ones_like
関数
np.ones_like関数は、既存の配列の属性(形状、データ型、メモリレイアウト、サブクラス)を引き継いだ上で、要素の値のみ1にした初期化配列を生成します。以下のコードでは、元の配列の形状(2×3)とデータ型(int)を引き継いでいることが確認できます。
import numpy as np
x = np.arange(6).reshape(2, 3)
np.ones_like(x)
何らかの属性を変更したい場合はオプション引数で指定することが可能です。詳しくは、以下のページをご覧ください。
3. 要素が任意の値の初期化配列を生成
上の2つは、初期化の際の要素の値が決まっていましたが、任意の値で初期化する関数として、np.full
関数が用意されています。
np.full
関数
上2つの関数と違って、np.full関数には、第一引数に生成する配列の形状、第二引数に初期化する際の値という2つの引数を渡す必要があります。
import numpy as np
np.full((2, 3), -1)
要素のデータ型は、第二引数に指定した値と同じものになります。第二引数に浮動小数点数(float型)を渡すと、要素の方もfloat型になります。
np.full((2, 3), 1.5)
要素の値は、欠損値nanなどを指定することもできます。
np.full((2, 3), np.nan)
詳しくは以下のページで解説しています。
np.full_like
関数
np.full_like関数は、既存の配列の属性(形状、データ型、メモリレイアウト、サブクラス)を引き継いだ上で、要素を指定の値で初期化した新しい配列を生成します。
必須引数として、第一引数に元の配列、第二引数に初期化する値を渡す必要があります。
import numpy as np
x = np.arange(6).reshape(2, 3)
np.full_like(x, -1)
np.full_like
関数には注意点があります。この関数は元の配列の属性を受け継ぐので、このコードのように、元々の配列のデータ型が整数(int型)だが、浮動小数点数(float型)で初期化したいという場合は、元々の配列の属性が優先されます。
np.full_like(x, 1.5)
このような場合は、オプション引数でデータ型を指定してやる必要があります。
np.full_like(x, 1.5, dtype=float)
詳しい使い方は以下のページで解説しています。
4. 要素が空の(未初期化)の配列を生成
np.empty
関数
要素が空の配列を生成するには、np.empty
関数を使います。なお、厳密には空なのではなく、メモリに格納されているランダムな値(未初期化の値)をそのまま当てはめます。要素を特定の値に変換する手間を挟まずに配列を生成するため、基本的に上の3つの関数よりも高速です。そのため、空の配列を生成するのに向いているということです。
引数には任意の形状を渡します。
import numpy as np
np.empty((2, 3))
詳しくは以下のページで解説しています。
np.empty_like
関数
np.empty_like
関数は、既存の配列の属性(形状、データ型、メモリレイアウト、サブクラス)を引き継いだ上で、要素が空の配列を生成します。引数には、元となる配列を渡します。
import numpy as np
x = np.arange(6).reshape(2, 3)
np.empty_like(x)
詳しくは以下で解説しています。
5. まとめ
以上、初期化配列を生成する4つの方法と8つの関数を紹介しました。配列の初期化は基本的な操作なので、しっかりと抑えておきましょう。
コメント