NumPy データ型

numpy がサポートするデータ型は Python 組み込みの型よりもはるかに多く、基本的には C 言語のデータ型に対応しています。そのうち一部の型は Python 組み込みの型に対応しています。以下の表に、よく使われる NumPy の基本型を示します。

名前 説明
bool_ ブール型データ型(True または False)
int_ デフォルトの整数型(C 言語の long に類似、int32 または int64)
intc C の int 型と同じで、通常は int32 または int64
intp インデックスに使用する整数型(C の ssize_t に類似、通常は int32 または int64)
int8 バイト(-128 から 127)
int16 整数(-32768 から 32767)
int32 整数(-2147483648 から 2147483647)
int64 整数(-9223372036854775808 から 9223372036854775807)
uint8 符号なし整数(0 から 255)
uint16 符号なし整数(0 から 65535)
uint32 符号なし整数(0 から 4294967295)
uint64 符号なし整数(0 から 18446744073709551615)
float_ float64 型の略称
float16 半精度浮動小数点数。符号ビット 1 個、指数ビット 5 個、仮数ビット 10 個を含む
float32 単精度浮動小数点数。符号ビット 1 個、指数ビット 8 個、仮数ビット 23 個を含む
float64 倍精度浮動小数点数。符号ビット 1 個、指数ビット 11 個、仮数ビット 52 個を含む
complex_ complex128 型の略称、すなわち 128 ビットの複素数
complex64 複素数。2 つの 32 ビット浮動小数点数(実数部と虚数部)を表す
complex128 複素数。2 つの 64 ビット浮動小数点数(実数部と虚数部)を表す

numpy の数値型は実際には dtype オブジェクトのインスタンスであり、一意の文字に対応します。np.bool_、np.int32、np.float32 などがあります。


データ型オブジェクト (dtype)

データ型オブジェクト(numpy.dtype クラスのインスタンス)は、配列に対応するメモリ領域がどのように使用されるかを記述するために使われます。データの以下の側面を記述します:

  • データの型(整数、浮動小数点数、または Python オブジェクト)
  • データのサイズ(例:整数を何バイトで格納するか)
  • データのバイト順(リトルエンディアンまたはビッグエンディアン)
  • 構造化タイプの場合、フィールドの名前、各フィールドのデータ型、および各フィールドが占めるメモリブロックの部分
  • データ型がサブ配列の場合、その形状とデータ型が何であるか。

バイト順は、データ型に事前に設定することによって< 或 >決定されます。<リトルエンディアンを意味します(最小値が最小アドレスに格納されます。つまり下位バイトが先頭に置かれます)。>ビッグエンディアンを意味します(最上位バイトが最小アドレスに格納されます。つまり上位バイトが先頭に置かれます)。

dtype オブジェクトは以下の構文を使用して構築されます:

numpy.dtype(object, align, copy)
  • object - 変換するデータ型オブジェクト
  • align - true の場合、フィールドをパディングして C の構造体のようにします。
  • copy - dtype オブジェクトをコピーします。false の場合、組み込みデータ型オブジェクトへの参照になります。

例

次に、例を通して理解していきましょう。

例 1

import numpy as np # スカラー型を使用 dt = np.dtype(np.int32) print(dt)

出力結果は次のとおりです:

int32

例 2

import numpy as np # int8、int16、int32、int64 の4つのデータ型は、文字列 'i1'、'i2'、'i4'、'i8' で置き換えることができます dt = np.dtype('i4') print(dt)

出力結果は次のとおりです:

int32

例 3

import numpy as np # バイト順を指定 dt = np.dtype('<i4') print(dt)

出力結果は次のとおりです:

int32

次の例は、構造化データ型の使用法を示しています。型フィールドと対応する実際の型が作成されます。

例 4

# まず構造化データ型を作成 import numpy as np dt = np.dtype([('age',np.int8)]) print(dt)

出力結果は次のとおりです:

[('age', 'i1')]

例 5

# データ型を ndarray オブジェクトに適用 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a)

出力結果は次のとおりです:

[(10,) (20,) (30,)]

例 6

# 型フィールド名を使用して、実際の age 列にアクセスできる import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a['age'])

出力結果は次のとおりです:

[10 20 30]

次の例では、文字列フィールド name、整数フィールド age、浮動小数点フィールド marks を含む構造化データ型 student を定義し、この dtype を ndarray オブジェクトに適用します。

例 7

import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) print(student)

出力結果は次のとおりです:

[('name', 'S20'), ('age', 'i1'), ('marks', 'f4')]

例 8

import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) print(a)

出力結果は次のとおりです:

[(b'abc', 21, 50.) (b'xyz', 18, 75.)]

各組み込み型には、それを一意に定義する文字コードがあります。次のとおりです:

文字 対応する型
bブール型
i(符号付き) 整数型
u 符号なし整数型
f浮動小数点型
c 複素数浮動小数点型
m timedelta(時間間隔)
M datetime(日時)
O (Python) オブジェクト
S, a (バイト)文字列
U Unicode
V 生データ (void)
その他の拡張