NumPyで初期化配列(array)を作成する4つの方法

NumPyでは初期化配列(ndarray)を生成する関数が複数用意されています。大きく分けて以下の4つです。

  • np.zeros: 要素が0の初期化配列を生成
  • np.ones: 要素が1の初期化配列を生成
  • np.full: 要素が任意の値の初期化配列を生成
  • np.empty:要素が空の(未初期化の)配列を生成

それぞれ、どの値で初期化するのかが異なります。ここではこれらの関数の使い方について簡潔に確認していきます。配列の初期化はよく行う操作の一つなので覚えておきましょう。

目次

1. 要素の値が0の初期化配列を生成

np.zeros関数

要素の値が0の初期化配列を生成するには、np.zeros関数を使います。引数には、生成する配列のshapeを指定します。

In [1]:
import numpy as np
np.zeros((2, 3))
Out[1]:
array([[0., 0., 0.],
       [0., 0., 0.]])

デフォルトでは、生成される配列のデータ型はfloat64ですが、オプション引数で変更することが可能です。詳しい使い方は以下で解説しています。

np.zeros_like関数

もう一つ、np.zeros_like関数があります。この関数は、既存の配列の属性(形状やデータ型など)を引き継いだ上で、要素の値が0の新しい配列を生成します。

例えば、以下のコードでは元の配列の形状(2×3)とデータ型(int)を引き継いで、要素のみ初期化していることがわかります。

In [1]:
import numpy as np
x = np.arange(6).reshape(2, 3)
np.zeros_like(x)
Out[1]:
array([[0, 0, 0],
       [0, 0, 0]])

この他、メモリレイアウトやサブクラスなどの属性も引き継ぎますので、とても便利です。以下のページでより詳しく解説しています。

2. 要素の値が1の初期化配列を生成

np.ones関数

要素の値が1の初期化配列を生成するには、np.ones関数を使います。np.zeros関数と同じく、引数には生成する配列のshapeを指定します。これはすべての関数で共通です。

In [1]:
import numpy as np
np.ones((2, 3))
Out[1]:
array([[1., 1., 1.],
       [1., 1., 1.]])

このようにデフォルトでは、データ型は浮動小数点数(float64)です。詳しい使い方は以下のページで解説しています。

np.ones_like関数

np.ones_like関数は、既存の配列の属性(形状、データ型、メモリレイアウト、サブクラス)を引き継いだ上で、要素の値のみ1にした初期化配列を生成します。以下のコードでは、元の配列の形状(2×3)とデータ型(int)を引き継いでいることが確認できます。

In [1]:
import numpy as np
x = np.arange(6).reshape(2, 3)
np.ones_like(x)
Out[1]:
array([[1, 1, 1],
       [1, 1, 1]])

何らかの属性を変更したい場合はオプション引数で指定することが可能です。詳しくは、以下のページをご覧ください。

3. 要素が任意の値の初期化配列を生成

上の2つは、初期化の際の要素の値が決まっていましたが、任意の値で初期化する関数として、np.full関数が用意されています。

np.full関数

上2つの関数と違って、np.full関数には、第一引数に生成する配列の形状、第二引数に初期化する際の値という2つの引数を渡す必要があります。

In [1]:
import numpy as np
np.full((2, 3), -1)
Out[1]:
array([[-1, -1, -1],
       [-1, -1, -1]])

要素のデータ型は、第二引数に指定した値と同じものになります。第二引数に浮動小数点数(float型)を渡すと、要素の方もfloat型になります。

In [2]:
np.full((2, 3), 1.5)
Out[2]:
array([[1.5, 1.5, 1.5],
       [1.5, 1.5, 1.5]])

要素の値は、欠損値nanなどを指定することもできます。

In [3]:
np.full((2, 3), np.nan)
Out[3]:
array([[nan, nan, nan],
       [nan, nan, nan]])

詳しくは以下のページで解説しています。

np.full_like関数

np.full_like関数は、既存の配列の属性(形状、データ型、メモリレイアウト、サブクラス)を引き継いだ上で、要素を指定の値で初期化した新しい配列を生成します。

必須引数として、第一引数に元の配列、第二引数に初期化する値を渡す必要があります。

In [1]:
import numpy as np
x = np.arange(6).reshape(2, 3)
np.full_like(x, -1)
Out[1]:
array([[-1, -1, -1],
       [-1, -1, -1]])

np.full_like関数には注意点があります。この関数は元の配列の属性を受け継ぐので、このコードのように、元々の配列のデータ型が整数(int型)だが、浮動小数点数(float型)で初期化したいという場合は、元々の配列の属性が優先されます。

In [2]:
np.full_like(x, 1.5)
Out[2]:
array([[1, 1, 1],
       [1, 1, 1]])

このような場合は、オプション引数でデータ型を指定してやる必要があります。

In [3]:
np.full_like(x, 1.5, dtype=float)
Out[3]:
array([[1.5, 1.5, 1.5],
       [1.5, 1.5, 1.5]])

詳しい使い方は以下のページで解説しています。

4. 要素が空の(未初期化)の配列を生成

np.empty関数

要素が空の配列を生成するには、np.empty関数を使います。なお、厳密には空なのではなく、メモリに格納されているランダムな値(未初期化の値)をそのまま当てはめます。要素を特定の値に変換する手間を挟まずに配列を生成するため、基本的に上の3つの関数よりも高速です。そのため、空の配列を生成するのに向いているということです。

引数には任意の形状を渡します。

In [1]:
import numpy as np
np.empty((2, 3))
Out[1]:
array([[-2.68156159e+154, -2.68156159e+154,  1.48219694e-323],
       [ 3.95252517e-323,  1.18575755e-322,  4.17201348e-309]])

詳しくは以下のページで解説しています。

np.empty_like関数

np.empty_like関数は、既存の配列の属性(形状、データ型、メモリレイアウト、サブクラス)を引き継いだ上で、要素が空の配列を生成します。引数には、元となる配列を渡します。

In [1]:
import numpy as np
x = np.arange(6).reshape(2, 3)
np.empty_like(x)
Out[1]:
array([[1152921504606846976, 1152921504606846976,                   3],
       [                  8,                  24,     844424930131976]])

詳しくは以下で解説しています。

5. まとめ

以上、初期化配列を生成する4つの方法と8つの関数を紹介しました。配列の初期化は基本的な操作なので、しっかりと抑えておきましょう。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる