今回は、要素が1の配列を生成する関数である、np.ones
について解説します。同様の生成系の関数として、np.empty
やnp.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’, like=None)
params:
パラメータ名 | 型 | 概要 |
---|---|---|
shape |
intまたは intのタプル |
生成する配列の形状shape を指定します。 |
dtype |
dtype データ型 |
(省略可能)初期値”float64” 要素のデータ型を指定します。 |
order |
‘C’または’F’ | (省略可能)初期値’C’ 配列のデータの保存の仕方を指定します。 |
like |
コレクション | 生成される配列を__array_functin__ プロトコルを継承しているオブジェクトに参照するように指定することができます |
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, shape=None, device=None)
params:
パラメータ名 | 型 | 概要 |
---|---|---|
a |
array_like 配列に相当するもの |
生成する配列の形状shape 、dtype を持つndarrayを指定します。 |
dtype |
dtype データ型 |
(省略可能)初期値None 生成する配列の要素のデータ型を指定します。 デフォルトは a のデータ型を継承します。 |
order |
‘C’, ‘F’, ‘A’, ‘K’ のいずれか |
(省略可能)初期値’K’ 配列のデータの保存の仕方を指定します。’K’であれば、できる限り元の配列のものを継承します。 |
subok |
bool値 TrueまたはFalse |
(省略可能)初期値Truea のサブクラスのデータ型でndarrayを生成するかどうかを指定します。 |
shape |
intかintのシーケンス | 結果のshapeを上書きします。 |
device |
str | (省略可能)生成された配列がどこで使用されるか指定します。 Array-APIを使用するのであれば "cpu" であるはずです。 |
基本的な使い方
ある配列(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)