NumPy では配列の要素のデータ型が1種類に統一されます.まずは,Python の変数とリストについて,どのようなデータ型になっているかを確認してみよう.下の 4 つのコードを実行するとそれぞれ「int」「float」「str」「list」というデータ型になっていることがわかります.
変数の型
import numpy as np # プログラムの先頭でモジュールを読み込む
z = 5
type(z)
int
変数の型
z = 3.14
type(z)
float
変数の型
z = "hoge"
type(z)
str
リストの型
x = [1, 2, 3, 4]
type(x)
list
次に,NumPy の配列を定義して,その型を確認します.1次元配列,2次元配列ともに,numpy.ndarray オブジェクトであることが確認できました.
NumPy 1次元配列の型
a = np.array(x)
type(a)
numpy.ndarray
NumPy 2次元配列の型
A = np.array([[1, 2], [3, 4]])
type(A)
numpy.ndarray
さらに NumPy 配列の要素のデータ型を dtype
プロパティによって確認してみよう.下記の2つともに,要素のデータ型は64ビットの整数型 (int64) になっていることがわかります.
NumPy 配列要素のデータ型
print(a)
a.dtype
[1 2 3 4] dtype('int64')
NumPy 配列要素のデータ型
print(A)
A.dtype
[[1 2] [3 4]] dtype('int64')
次に,NumPy 配列の要素を実数型にしてみよう.以下の通り,64ビットの浮動小数点型になっていることが確認できます.
NumPy 配列要素のデータ型
x = [1., 2., 3., 4.]
a = np.array(x)
print(a)
a.dtype
[1. 2. 3. 4.] dtype('float64')
NumPy 配列の作成時に型を指定することも可能です.特に大きな配列を扱うときにはメモリの使用量を抑えるために倍精度浮動小数点型 (float64) ではなく,単精度浮動小数点型 (float32) や半精度浮動小数点型 (float16) などを利用することもあるでしょう.
A = np.array([[1, 2], [3, 4]], dtype=np.float32)
print(A)
A.dtype
[[1. 2.] [3. 4.]] dtype('float32')
A = np.array([[1, 2], [3, 4]], dtype=np.float16)
print(A)
A.dtype
[[1. 2.] [3. 4.]] dtype('float16')
なお,NumPy のデータ型として符号あり整数型には int8, int16, int32, int64が,符号なし整数型には uint8, uint16, uint32, uint64 があります.浮動小数点型には半精度浮動小数点型 float16,単精度浮動小数点型 float32,倍精度浮動小数点型 float64,4倍精度浮動小数点型 float128 があります.その他,複素数型 (complex64, complex128, complex256) や真偽値型 (bool),固定長文字列型 (string_, unicode_),オブジェクト型 (object) などがあります.