NumPyのastype()の使い方がイマイチ分かりません。
astype()はNumPyオブジェクトのデータ型を変換するときに使われる。
NumPyのデータ型についても併せて解説しよう。
✔️ 本記事のテーマ
NumPyのastype()について
✔️ 読者さんへの前置きメッセージ
本記事は「NumPyオブジェクトのデータ型とその変換」について書いています。
NumPyオブジェクトはその場合に応じたデータ型を取ります。
そして、そのデータ型はastype()を使うことで自由に変換(キャスト)することができます。
しかし、その一方で、NumPyのデータ型変換にはいくつかの特徴があり、
キャストする際にはその特徴を理解しておく必要があるでしょう。
この記事では
- Numpyのデータ型一覧
- Numpyのデータ型変換の仕様
についてサンプルコードとともに解説します。
それでは、解説していきましょう。
NumPyのデータ型一覧
一覧化すると、Numpyオブジェクトは以下のデータ型を取ります。
データ型 | 説明 |
int8 | 符号あり8ビット整数型 |
int16 | 符号あり16ビット整数型 |
int32 | 符号あり32ビット整数型 |
int64 | 符号あり64ビット整数型 |
uint8 | 符号なし8ビット整数型 |
uint16 | 符号なし16ビット整数型 |
uint32 | 符号なし32ビット整数型 |
uint64 | 符号なし64ビット整数型 |
float16 | 半精度浮動小数点型 |
float32 | 単精度浮動小数点型 |
float64 | 倍精度浮動小数点型 |
float128 | 四倍精度浮動小数点型 |
complex64 | 複素数(実部・虚部がそれぞれfloat32) |
complex128 | 複素数(実部・虚部がそれぞれfloat64) |
complex256 | 複素数(実部・虚部がそれぞれfloat128) |
bool | ブール型 |
unicode | Unicode文字列 |
object | Pythonオブジェクト型 |
NumPyオブジェクトの生成時に各データ型を指定することで、
任意のデータ型でオブジェクトを生成することができます。
また、データ型の指定は np.XXX , 文字列 , 型コード のいずれの指定でもOKです。
import numpy as np
np_sample = np.array([1, 2, 3], dtype=np.int8)
print(np_sample.dtype)
# int8
np_sample = np.array([1, 2, 3], dtype='int8')
print(np_sample.dtype)
# int8
np_sample = np.array([1, 2, 3], dtype='i1')
print(np_sample.dtype)
# int8
Numpyのデータ型変換(astype)
Numpyのデータ型変換は astype() で行うことができます。
astype() はndarry(NumPy配列)のメソッドです。
試しにコードを書いてみましょう。
import numpy as np
sample_int = np.array([1, 2, 3], dtype=np.int8)
print(a)
print(a.dtype)
# [1 2 3]
# int64
a_float = a.astype(np.float32)
print(a_float)
print(a_float.dtype)
# [1. 2. 3.]
# float32
この通り、astype()をかけることでint -> float へとデータ型を変換することができました。
Numpyのデータ型変換の注意点
便利なNumpyのデータ変換ですが、
Numpyのデータ型を変換する際には以下の場合において注意点があります。
- float -> int の変換(キャスト)
- 暗黙の型変換
順番に解説しましょう。
float -> int の変換(キャスト)
float型からint型へ変換する場合に、
astype()でキャストすると小数点以下は切り捨てられます。
例えば、コードで示すと、以下の通りです。
import numpy as np
sample_float = np.array([-1.1, -3.3, 5.5, 7.7, 9.9, 0.8, -0.6])
print(sample_float)
# [-1.1 -3.3 5.5 7.7 9.9 0.8 -0.6]
print(sample_float.dtype)
# float64
sample_int = sample_float.astype('int64')
print(sample_int)
# [-1 -3 5 7 9 0 0]
print(sample_int.dtype)
# int64
小数点は四捨五入ではなく切り捨ての扱いになっています。
これにより 0.8 も -0.6 も 0 に丸められています。
暗黙の型変換
NumPyでは astype() を使わずとも、
演算の結果として、暗黙的に型変換がされる場合があります。
例えば、np.int であっても / 演算子による除算の結果は float に変換されます。
import numpy as np
sample_list = np.array([1, 2, 3])
print(sample_list.dtype)
# int64
print((sample_list / 2).dtype)
# float64
また、int型 + float型 , int型 * float型 , int型 – float型 など、
除算以外の四則演算も float型 を混ぜると 演算結果は float型 に変換されます。
import numpy as np
sample_list = np.array([1, 2, 3])
print(sample_list.dtype)
# int64
print((sample_list + 1.0).dtype)
# float64
print((sample_list * 1.0).dtype)
# float64
print((sample_list - 1.0).dtype)
# float64
一方、int型同士の演算結果はそのままint型となります。
import numpy as np
sample_list = np.array([1, 2, 3])
print(sample_list.dtype)
# int64
print((sample_list + 1).dtype)
# int64
print((sample_list * 1).dtype)
# int64
print((sample_list - 1).dtype)
# int64
Numpyについてスキルをつけるための一冊
今回は Numpy の astype() によるデータ型のキャストついて解説しました。
Numpyは画像認識や機械学習を行う上では、欠かすことのできないライブラリです。
Numpyについてスキルをつけるなら、以下の書籍がオススメです。
この書籍はNumPyを使った、
データ分析や機械学習の世界に入門するのに最適な書籍です。
NumPy 独自の配列や演算などの概念がていねいに解説されています。
また、出版元もIT技術書の世界では、有名なオライリー社です。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント