NumPyのデータ型(dtype)
NumPy には Python 本体に比べて遥かに多くの種類のデータ型 (Data type) が組込まれています。
NumPy データ型 | 説明 |
---|---|
bool_ | ブール型 (True または False), 1 byte に格納 |
int_ | デフォルト整数型 (int64 または int32) |
intc | C言語と同じ整数型 (int64 または int32) |
intp | インデックス用整数 (C 言語の ssize_t, int64 または int32) |
int8 | バイト (-128 ~ 127) |
int16 | 整数型 (-32768 to 32767) |
int32 | 整数型 (-2147483648 to 2147483647) |
int64 | 整数型 (-9223372036854775808 to 9223372036854775807) |
uint8 | 符号なし整数 (0 ~ 255) |
uint16 | 符号なし整数 (0 ~ 65535) |
uint32 | 符号なし整数 (0 ~ 4294967295) |
uint64 | 符号なし整数 (0 ~ 18446744073709551615) |
float_ | float64 の省略表記 |
float16 | 半精度浮動小数点数型 (符号 1 bit, 指数部 5 bit, 仮数部 10 bit) |
float32 | 単精度浮動小数点数型 (符号 1 bit, 指数部 8 bit, 仮数部 23 bit) |
float64 | 倍精度浮動小数点数型 (符号 1 bit, 指数部 11 bit, 仮数部 52 bit) |
complex_ | complex128 の省略表記 |
complex64 | 虚部・実部がそれぞれ32bit浮動小数点数で表される複素数型 |
complex128 | 虚部・実部がそれぞれ64bit浮動小数点数で表される複素数型 |
str | ユニコード文字列 |
void | Rawデータ |
データ型関数を使うと、Python の数値を NumPy の数値に変換することができます。
# PYTHON_NUMPY_DTYPE # In[1] import numpy as np # 半精度浮動小数点数 x = np.complex64(3 + 2j) print(x) print(type(x)) # (3+2j) # <class 'numpy.complex64'>
データ型の指定
配列を生成するときに dtype にデータ型を渡すと、全ての要素が指定したデータ型に揃えられます。NumPy においては、1つの配列に含まれる要素のクラスは1種類に揃えられます(特に指定しなくても自動的に揃えられます)。引数は np.float32, あるいは “float32” のような記法で渡します。
# In[2] x = np.array([1, 2, 3], dtype = np.float32) print(x) # [1. 2. 3.]
NumPy のデータ型関数にリストやタプルなどのシーケンスを渡すと、戻り値はシーケンスではなく配列となります。おそらく、これは最も簡潔な配列生成記法です。
# In[3] # 64bit複素数型の1次元配列を生成 x = np.complex_([1, 2, 3]) print(x) # [1.+0.j 2.+0.j 3.+0.j]
complex_ は complex128 の省略記号であり、実部と虚部それぞれに 64 bit の浮動小数点数が使われています。
データ型の変更
ndarray.astype() は配列のデータ型を変更します(元の配列を変更せずにコピーを作ります)。
# In[4] x = np.int_([1, 2, 3]) y = x.astype(float) print("x =", x) print("y =", y) # x = [1 2 3] # y = [1. 2. 3.]
データ型の参照
ndarray.dtype にアクセスすると配列のデータ型を参照できます。
# In[5] x = np.complex64([1, 2, 3]) print("x =", x) print("データ型", x.dtype) # x = [1.+0.j 2.+0.j 3.+0.j] # データ型 complex64
コメント
【技術英語の豆知識】alternate
PC のキーボードに [alt] キーがあります。他のキーと一緒に押すと、そのキーの働きを変える機能をもちます。alt は alternate の頭文字です。alternate は「他の人やモノの代わりに使用できたり、選んだりできるもの」、つまり「代替の」を意味する単語です。動詞は alter (代わる)、名詞は alternative (代替) です。
decent alternateive to MATLAB(MATLAB に代わる優れた製品)
のような表現で用いられます。印欧語源の altero は「二つのうち一方」を意味し、同根の英語に altercate (口論する) があります。ちなみに、Pythonista の皆さんなら「MATLAB に代わる優れた製品」はすぐにわかりますよね。言うまでもなく、Matplotlib のことですよ。え? まだ研究で MATLAB を使ってる!? すぐに Matplotlib に乗り換えましょう!