NumPyのastypeによるデータ型の変換(キャスト)について

NumPyのastypeによるデータ型の変換(キャスト)についてNumpy
ゆうすけ
ゆうすけ

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ブール型
unicodeUnicode文字列
objectPythonオブジェクト型

 

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.60 に丸められています。

 

暗黙の型変換

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についてスキルをつけるための一冊

今回は Numpy の astype() によるデータ型のキャストついて解説しました。

 

Numpyは画像認識や機械学習を行う上では、欠かすことのできないライブラリです。

 

Numpyについてスキルをつけるなら、以下の書籍がオススメです。

 

この書籍はNumPyを使った、
データ分析や機械学習の世界に入門するのに最適な書籍です。

 

NumPy 独自の配列や演算などの概念がていねいに解説されています。

また、出版元もIT技術書の世界では、有名なオライリー社です。

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

タイトルとURLをコピーしました