こんにちは、インストラクターのフクロウです。
この記事ではnp.ndarrayの要素の型を確認したり、設定するためのパラメータ「dtype」を学んでいきます!
この記事の内容
- dtypeを使った配列要素の型の確認
- dtypeを使った型指定をした配列の初期化
- astypeを使った排列要素のキャスト変換
NumPyのdtype(データ型)一覧
np.ndarrayの要素として使える主な型は以下のとおりです。
import numpy as np dtypes = [ np.int8, # 符号あり 8bit 整数 np.int16, # 符号あり 16bit 整数 np.int32, # 符号あり 32bit 整数 np.int64, # 符号あり 64bit 整数 np.uint8, # 符号なし 8bit 整数 np.uint16, # 符号なし 16bit 整数 np.uint32, # 符号なし 32bit 整数 np.uint64, # 符号なし 64bit 整数 np.float16, # 半精度 浮動小数点数 np.float32, # 単精度 浮動小数点数 np.float64, # 倍精度 浮動小数点数 np.float128, # 四倍精度 浮動小数点数 np.complex64, # 複素数 (実数・虚数が float32) np.complex128, # 複素数 (実数・虚数が float64) np.complex256, # 複素数 (実数・虚数が float128) np.bool, # 真偽値 np.unicode, # Unicode文字列 np.object # Pythonオブジェクト(へのポインタ) ]
整数や浮動小数点数だけでなく、真偽値や文字列にも対応しています。
np.ndarrayの中身は同じ型であることが求められるので、Pythonのlistのようにいろんな型のオブジェクトが入っているようなことはありませんよ!
dtypeの使い方
このセクションでは、NumPyの型にまつわる機能をチェックしましょう。
np.ndarray.dtypeで配列の要素の型を確認
配列要素の型が確認したいと言うときに、type(arr)としても「numpy.ndarray」と返されるだけです。
np.ndarrayの要素の型を確認するには、dtypeにアクセスします。
intarr = np.array([1,2,3]) boolarr = np.array([True, False, True]) pyarr = np.array([[], {}, [1,2]]) print(intarr.dtype, boolarr.dtype, pyarr.dtype ) # 出力結果 int64 bool object
行列計算(例えば内積)をするときに、できれば計算に使う配列のdtypeは合わせるようにしましょう。
そうでないと、意図しないキャスト変換が起こるかもしれません。
事前にdtypeなどで型をチェックしておくことをおすすめします。
配列を初期化する際にdtypeで型を指定
np.ndarrayを作る際に、dtypeパラメータを指定することで配列の要素の型を指定できます。
int16arr = np.array([1,2,3], dtype=np.int16) float32arr = np.array([1,2,3], dtype=np.float32) complex256arr = np.array([1+2j, 2-3j], dtype=np.complex256) print(int16arr.dtype, float32arr.dtype, pyarr.dtype ) # 出力結果 int16 float32 object
ファイル(例えばCSVファイル)からデータを読み込むとき、読み込んだデータを意図したデータ型にしたい場合があります。
そんなとき、np.ndarrayを作るときにdtypeパラメータを指定しましょう!
np.ndarray.astypeで配列の要素の型を変更
np.ndarrayにはastypeメソッドが用意されていて、これを使うと既存の配列の要素の型を変えた新しい配列が作れます。
※変更したい配列自体の型が変わるわけではないことに注意!
int16arr_ = int16arr.astype(np.float16) float32arr_ = float32arr.astype(np.float128) complex256arr_ = complex256arr.astype(np.complex64) print(int16arr_, int16arr_.dtype) print(float32arr_, float32arr_.dtype) print(complex256arr_, complex256arr_.dtype)
[出力結果]
[1. 2. 3.] float16 [1. 2. 3.] float128 [1.+2.j 2.-3.j] complex64
scikit-learnでデータセットを読み込んだとき、データが既にnp.ndarrayになっているものがあります。
読み込んだ配列が意図しないデータ型になっていたならば、astypeメソッドでデータ型を変更してしまいましょう!
まとめ
この記事では、NumPyの配列の型を設定・確認するdtypeパラメータについて紹介しました。
効率的な行列計算を行うには、配列要素のデータ型を適切に設定することが大切です!
type関数では配列の要素の型まではわからないので、dtypeを適切に使いこなせるようになりましょう!