np.array
関数はリストやタプルなどのPythonの標準シーケンスから配列を生成する関数です。このページでは、この関数の書き方や使い方をサンプルコードを見ながら解説していきます。
使用頻度が高い関数ですので、しっかりと使い方を抑えておきましょう。
1. 書式
np.array関数の書式は以下の通りです。サッと確認しておきましょう。
書き方:
np.array(object, dtype=None, subok=False, ndmin=0)
パラメーター:
object: array_like リストやタプルなどのシーケンスを渡す。 |
dtype: data-type, optional 出力する配列のデータ型を指定する。指定しない場合は、シーケンスのオブジェクトを保持するのに必要な最小の型になる。基本的に、第一引数で渡したオブジェクトの型をそのまま引き継ぐと考えれば良い。 |
subok: bool, optional Trueにした場合、第一引数で渡したオブジェクトのサブクラスを引き継ぐ。デフォルトのFalse値の場合は配列を生成する。 |
ndmin: int, optional 生成する配列の次元数を指定する。 |
戻り値:
out: ndarray 引数で指定した通りのNumPyの配列を返す。 |
一緒に確認したい関数:
2. サンプルコード
それでは、早速、サンプルコードを見ながら使い方を確認していきましょう。
2.1. 1次元配列の生成
以下のコードでは、引数にリストを渡して配列を生成しています。
import numpy as np
# リストから配列を生成
np.array([1, 2, 3])
タプルを渡しても構いません。
# タプルでも可能
np.array((4, 5, 6))
よくある間違いに、引数にリストやタプルなどのシーケンスではなく、数値を直接渡してしまうというものがあります。その場合はエラーになりますので気をつけましょう。
# よくある間違い。引数に数値を渡してしまう。
np.array(1, 2, 3)
2.2. 多次元配列の生成
多重シーケンスを渡した場合、生成される配列の次元数は、それに準じたものになります。2重リストを渡すと2次元配列が生成されます。
# 2重リストを渡すと2次元配列を生成
np.array([[1, 2, 3], [4, 5, 6]])
3重リストを渡すと3次元配列が生成されます。
# 3重リストを渡すと3次元配列を生成
np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
2.3. 要素の型の変更
さて、NumPyの配列では、複数の要素の型が混在することはできません。そのため例えば元のリストの要素にint型とfloat型が混在している場合、生成される配列の要素の型(dtype)はfloat型になります。
なお、NumPyの配列の要素の型については『NumPyのdtype属性の一覧と参照・指定・変更方法』で詳しく解説しています。
# リストにint型・float型が混在している場合
np.array([1, 2.0, 3])
元のリストの要素にint型・float型・str型が混在している場合、生成される配列の要素の型(dtype)は、str型になってしまいます。
# リストにint型・float型・str型が混在している場合
np.array([1, 2.0, '3'])
優先順位は次の通りです。
str > complex > float > int
同じデータ型ならビット数が大きいものが優先されます。
int64 > int32 > int16 > int8
さて、このようにリストに望まぬデータ型の要素が含まれている場合、オプション引数の dtype=
が役に立ちます。
# dtype= で int型を指定
a = np.array([1, 2.0, '3'], dtype=int)
a
dtype属性を確認してみると、指定通りint型になっていることがわかります。
a.dtype
なお、オプション引数 dtype=
では、ビット数まで指定することも可能です。その際は、dtype=np.int32
や dtype=np.float128
と書きます。
構造化配列の生成
次のように書けば、np.array
関数で構造化配列を生成することも可能です。なお、構造化配列についても、『NumPyのdtype属性の一覧と参照・指定・変更方法』で詳しく解説していますので、ぜひ一度目を通しておいてください。
>>> x = np.array([('John',180),('Mike',200)],dtype=[('name','<U4'),('height','int')])
>>> x
array([('John', 180), ('Mike', 200)],
dtype=[('name', '<U4'), ('height', '<i8')])
>>> x['name']
array(['John', 'Mike'], dtype='<U4')
>>> x['height']
array([180, 200])
他のオプション引数についてnp.array
関数の使い方については、以上を覚えておけば十分です。他に オプション引数 ndmin=
と、subok=
がありますが 使用頻度は限られています。以下でサっと説明しますが、完璧に理解しようとする必要はありません。読み流す程度で十分でしょう。
3. まとめ
以上のように、np.array
関数は、リストやタプルからNumPyの配列を生成する関数です。よく使う関数ですので、しっかりと使い方を抑えておきましょう。
なお、同じく使用頻度が高い関数に次のものがあります。
np.empty関数以外は、すべての要素が同じ値で初期化した配列を生成します。np.empty関数は要素の値がランダムの未初期化配列を生成します。要素を初期化しないので最も高速です。
これらも併せて確認しておくと良いでしょう。
コメント