今回は、要素が1の配列を生成する関数である、np.onesについて解説します。同様の生成系の関数として、np.emptynp.zeros関数がありますが、それらについては別途以下の記事で解説していますので、参考にしてみてください。

未初期化の配列を生成するnumpy.empty関数の使い方 /features/numpy-empty.html

0を要素とする配列を生成するnumpy.zerosの使い方 /features/numpy-zeros.html

本記事では、

  • np.onesの使い方
  • np.ones_likeとの違い

について紹介します。

np.ones

特別な機能などは特にない、シンプルな関数なので、簡単に使えるようになると思います。まずは、APIドキュメントから見ていきましょう。

numpy.ones(shape, dtype=None, order =’C’)

params:

パラメータ名 概要
shape intまたは
intのタプル
生成する配列の形状shapeを指定します。
dtype dtype
データ型
(省略可能)初期値”float64”
要素のデータ型を指定します。
order ‘C’または’F’ (省略可能)初期値’C’
配列のデータの保存の仕方を指定します。

returns:

指定されたshapeを持つ、要素が1の配列(ndarray)が返されます。

np.onesの引数は3つあり、必須の引数は、第一引数の配列の形状(shape)を指定するshapeだけです。他の2つの引数については、dtypeは要素のデータ型を、orderはデータの保存の仕方を指定します。orderについてはFortranのような順序を指定する場合に使われるものですが、あまり使用されることはありません。

実際のコードで使い方を見ていきましょう。

In [1]: import numpy as np

In [2]: np.ones(3) # 要素が3つの1次元配列。
Out[2]: array([ 1.,  1.,  1.])

In [3]: np.ones((2,3)) # 2×3の2次元配列
Out[3]:
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

次に、データ型を指定してみます。

In [4]: np.ones(4, dtype="float32") # データ型を"float32"にする。
Out[4]: array([ 1.,  1.,  1.,  1.], dtype=float32)

In [5]: np.ones(4, dtype="int8") # データ型を"int8"にする。
Out[5]: array([1, 1, 1, 1], dtype=int8)

In [6]: np.ones((2,3), dtype = "complex") # 複素数の形にすることもできる。
Out[6]:
array([[ 1.+0.j,  1.+0.j,  1.+0.j],
       [ 1.+0.j,  1.+0.j,  1.+0.j]])

np.ones_like

また、似たような関数として、np.ones_likeという関数も存在します。以下のようなAPIドキュメントになっています。

numpy.ones_like(a, dtype=None, order =’K’, subok=True)

params:

パラメータ名 概要
a array_like
配列に相当するもの
生成する配列の形状shapedtypeを持つndarrayを指定します。
dtype dtype
データ型
(省略可能)初期値None
生成する配列の要素のデータ型を指定します。
デフォルトはaのデータ型を継承します。
order ‘C’, ‘F’, ‘A’, ‘K’
のいずれか
(省略可能)初期値’K’
配列のデータの保存の仕方を指定します。’K’であれば、できる限り元の配列のものを継承します。
subok ブール値
TrueまたはFalse
(省略可能)初期値True
aのサブクラスのデータ型でndarrayを生成するかどうかを指定します。

ある配列(ndarray)aと同様の形状を持つ配列を生成したいとき、np.onesを使うと

b = np.ones(a.shape)

となります。ここで、np.ones_likeを使うと

b = np.ones_like(a)

上記のようにコードが簡潔になり、意味もわかりやすくなります。

ndarrayの実例は次のとおりです。

In [7]: a = np.array([[1,2,3],[2,3,4]])

In [8]: np.ones_like(a)
Out[8]:
array([[1, 1, 1],
       [1, 1, 1]])

In [9]: b = np.array([2,3,4], dtype = "int8" )

In [10]: np.ones_like(b)
Out[10]: array([1, 1, 1], dtype=int8)