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 に乗り換えましょう!