note.nkmk.me

NumPyで全要素を同じ値で初期化した配列ndarrayを生成

Date: 2017-12-28 / tags: Python, NumPy

NumPyですべての要素を同じ値で初期化した配列ndarrayを生成する方法は以下の通り。

形状(行数・列数など)shape、型dtypeを引数で指定して生成する方法。

  • numpy.zeros(): 0で初期化(ゼロ埋め)
  • numpy.ones(): 1で初期化
  • numpy.full(): 任意の値で初期化

既存の配列と同じ形状shape、型dtypeで生成する方法(異なる型を指定することも可能)。

  • numpy.zeros_like(): 0で初期化(ゼロ埋め)
  • numpy.ones_like(): 1で初期化
  • numpy.full_like(): 任意の値で初期化

それぞれについて、サンプルコードとともに説明する。

空の配列を生成する方法は以下の記事を参照。

Pythonのリスト(組み込み型list)を初期化したい場合は以下の記事を参照。

スポンサーリンク

numpy.zeros(): 0で初期化(ゼロ埋め)

全要素を0で初期化した配列ndarrayを生成したいときは、numpy.zeros()を使う。

生成したい配列の形状shapeを引数として渡す。スカラーの場合は一次元配列、タプルの場合は多次元配列となる。

import numpy as np

print(np.zeros(3))
# [ 0.  0.  0.]

print(np.zeros((2, 3)))
# [[ 0.  0.  0.]
#  [ 0.  0.  0.]]

デフォルトだと型dtypefloat64。引数dtypeで指定することもできる。

print(np.zeros(3).dtype)
# float64

print(np.zeros(3, dtype=np.int))
# [0 0 0]

print(np.zeros(3, dtype=np.int).dtype)
# int64

numpy.ones(): 1で初期化

全要素を1で初期化した配列ndarrayを生成したいときは、numpy.ones()を使う。

使い方はnumpy.zeros()と同じ。

生成したい配列の形状shapeを引数として渡す。

print(np.ones(3))
# [ 1.  1.  1.]

print(np.ones((2, 3)))
# [[ 1.  1.  1.]
#  [ 1.  1.  1.]]

デフォルトだと型dtypefloat64。引数dtypeで指定することもできる。

print(np.ones(3).dtype)
# float64

print(np.ones(3, dtype=np.int))
# [1 1 1]

print(np.ones(3, dtype=np.int).dtype)
# int64

numpy.full(): 任意の値で初期化

0や1ではなく任意の値で全要素を初期化した配列ndarrayを生成したいときは、numpy.full()を使う。

第一引数に生成したい配列の形状shapeを、第二引数に任意の埋める値fill_valueを渡す。

print(np.full(3, 100))
# [100 100 100]

print(np.full(3, np.pi))
# [ 3.14159265  3.14159265  3.14159265]

print(np.full((2, 3), 100))
# [[100 100 100]
#  [100 100 100]]

print(np.full((2, 3), np.pi))
# [[ 3.14159265  3.14159265  3.14159265]
#  [ 3.14159265  3.14159265  3.14159265]]

dtypeは埋める値fill_valueに応じて設定される。例えば、100だとint64100.0だとfloat64になる。

print(np.full(3, 100).dtype)
# int64

print(np.full(3, 100.0).dtype)
# float64

print(np.full(3, np.pi).dtype)
# float64

引数dtypeで型dtypeを指定することもできる。型変換(キャスト)された値で初期化される。

print(np.full(3, 100, dtype=float))
# [ 100.  100.  100.]

print(np.full(3, np.pi, dtype=int))
# [3 3 3]

numpy.zeros_like(): 0で初期化(ゼロ埋め)

元となる配列ndarrayを作成しておく。例として、型dtypeintの配列とfloatの配列を準備する。

import numpy as np

a_int = np.arange(6).reshape((2,3))
print(a_int)
# [[0 1 2]
#  [3 4 5]]

a_float = np.arange(6).reshape((2,3)) / 10
print(a_float)
# [[ 0.   0.1  0.2]
#  [ 0.3  0.4  0.5]]

全要素を0で初期化した配列ndarrayを生成したいときは、numpy.zeros_like()を使う。

第一引数に元となる配列を指定する。

生成される配列の型dtypeは元の配列の型dtypeになる。

print(np.zeros_like(a_int))
# [[0 0 0]
#  [0 0 0]]

print(np.zeros_like(a_float))
# [[ 0.  0.  0.]
#  [ 0.  0.  0.]]

引数dtypeで指定することもできる。

print(np.zeros_like(a_int, dtype=np.float))
# [[ 0.  0.  0.]
#  [ 0.  0.  0.]]

numpy.ones_like(): 1で初期化

全要素を1で初期化した配列ndarrayを生成したいときは、numpy.ones_like()を使う。

使い方はnumpy.zeros_like()と同じ。

第一引数に元となる配列を指定する。

生成される配列の型dtypeは元の配列の型dtypeになる。

print(np.ones_like(a_int))
# [[1 1 1]
#  [1 1 1]]

print(np.ones_like(a_float))
# [[ 1.  1.  1.]
#  [ 1.  1.  1.]]

引数dtypeで指定することもできる。

print(np.ones_like(a_int, dtype=np.float))
# [[ 1.  1.  1.]
#  [ 1.  1.  1.]]

numpy.full_like(): 任意の値で初期化

0や1ではなく任意の値で全要素を初期化した配列ndarrayを生成したいときは、numpy.full_like()を使う。

第一引数に元となる配列を、第二引数に任意の埋める値fill_valueを渡す。生成される配列の型dtypeは元の配列の型dtypeになる。

print(np.full_like(a_int, 100))
# [[100 100 100]
#  [100 100 100]]

print(np.full_like(a_float, 100))
# [[ 100.  100.  100.]
#  [ 100.  100.  100.]]

埋める値fill_valuefloatでも元の配列がintだと、intに型変換(キャスト)されてしまうので注意。

print(np.full_like(a_int, 0.123))
# [[0 0 0]
#  [0 0 0]]

print(np.full_like(a_float, 0.123))
# [[ 0.123  0.123  0.123]
#  [ 0.123  0.123  0.123]]

引数dtypeで型dtypeを指定することもできる。

print(np.full_like(a_int, 0.123, dtype=np.float))
# [[ 0.123  0.123  0.123]
#  [ 0.123  0.123  0.123]]
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事