np.ones
関数は、全ての要素が1の初期化配列を生成する関数です。このページでは、この関数の使い方について解説します。
なお、同じように要素が1の初期化配列を生成する関数に、np.ones_like
関数があります。こちらは、既にある配列の形状、データ型、メモリレイアウト、サブクラスを引き継いで、要素のみを1で初期化した配列を生成します。こちらに関しては、以下のページで解説していますので、併せて確認すると良いでしょう。
それでは、np.ones
関数の使い方を確認していきましょう。
1. 書式
まずは、基本的な書き方から確認しましょう。
書き方:
np.ones(shape, dtype=float, order='C')
パラメーター:
shape: 整数(int型) または 整数のタプル 配列のshapeを指定する。 |
dtype: データ型(オプション) 要素のデータ型を指定する。デフォルト値はnp.float64。 |
order: ’C’ か ‘F’ から選択(オプション) 多次元データのメモリレイアウトを C言語方式(行優先)か Fortran方式(列優先)から選択する。デフォルトは ‘C’。 |
戻り値:
out: 配列(ndarray) 全ての要素の値が1で、指定の形状・データ型の初期化配列 |
一緒に確認したい関数:
2. サンプルコード
それでは、サンプルコードを見ながら使い方を確認していきましょう。
基本的には、引数にshapeを渡すだけです。
1次元配列の生成
以下のコードでは、shape(5, )の1次元配列を生成しています。
import numpy as np
# 長さ5の1次元配列を生成
arr1 = np.ones(5)
# こちらの書き方でも可能です。
arr1 = np.ones((5,))
print(arr1)
多次元配列の生成
2次元配列や3次元配列も生成することができます。この場合、生成したい配列のshapeは必ずタプルで渡す必要があります。
# 2次元配列を生成
arr2 = np.ones((2, 5))
print('2次元配列: \n', arr2, '\n')
# 3次元配列を生成
arr3 = np.ones((2, 2, 5))
print('3次元配列: \n', arr3)
いずれの場合でも、デフォルトではnp.ones
関数で生成する初期化配列の要素の型はfloat64です。
配列の要素の型を変更
np.ones
関数の配列の要素の型をデフォルトのfloat64から変更したい場合は、オプション引数 dtype=
で任意のデータ型を指定します。
なお、NumPyのデータ型の一覧や、それを指定する時の書き方等は、『NumPyのdtypeの一覧と確認・指定・変更方法』で解説していますのでご確認ください。
以下のコードでは、それぞれint型、complex型、str型を指定して配列を生成しています。
# int型
arr4 = np.ones(5, dtype=int)
print('int型: \n', arr4, '\n')
# complex型
arr5 = np.ones((5,), dtype=complex)
print('complex型: \n', arr5, '\n')
# 文字列型
arr6 = np.ones((5, ), dtype=str)
print('文字列型: \n', arr6)
ビット数も指定することができます。
# int32
arr7 = np.ones((5, ), dtype=np.int32)
print('int32: ', arr7)
print('dtype: ', arr7.dtype, '\n')
# float8
arr8 = np.ones((5, ), dtype='float32')
print('float32: ', arr8)
print('dtype: ', arr8.dtype)
メモリレイアウトの変更
Pythonのコンテナのメモリレイアウトは基本的にC言語方式です。それぞれの方式の違いについては、以下のコードでご確認ください。
''' C言語方式(デフォルト) '''
arr_c = np.arange(6).reshape((2, 3), order='C')
print('C言語方式\n', arr_c, '\n')
''' Fortran形式 '''
arr_f = np.arange(6).reshape((2, 3), order='F')
print('Fortan形式\n', arr_f)
このようにC言語方式では行を優先的に、Fortran方式では列を優先的に格納していきます。
もし、Fortran方式のデータを扱いたい場合は、以下のようにオプション引数 order=
で変更することができます。
''' Fortran方式の配列を生成する。 '''
arr9 = np.ones((2, 5), order='F')
print(arr9)
3. まとめ
以上の通り、np.ones
関数は、任意の形状・データ型・メモリレイアウトで、全ての要素が1の初期化配列を生成する関数です。
NumPyには他にも、既存の配列の形状・データ型・メモリレイアウトを引き継いで、要素のみを1で初期化した新しい配列を生成する関数として、np.ones_like関数が用意されています。
こちらも以下のページで解説しているので併せて確認しておきましょう。
また他に初期化配列を生成する関数として、以下があります。
それぞれ使い分けると良いでしょう。
コメント