はじめに
この実験では、Python の NumPy ライブラリのデータ型について学びます。dtypeオブジェクトの構文とそのパラメータを見ていきます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
NumPy dtype オブジェクトの理解
NumPy では、配列のすべての要素はデータ型オブジェクトであり、これはNumPy の dtypeとも呼ばれます。データ型オブジェクトは、配列に対応するメモリの固定サイズを実装するために使用されます。
主に以下の情報を提供します。
- データの型(たとえば、
整数、浮動小数点数、または Python のオブジェクト) - データのサイズ
- バイトオーダー(リトルエンディアンまたはビッグエンディアン)
- 構造体型の場合、フィールド名、各フィールドのデータ型、および各フィールドが占有するメモリブロックの一部について教えてくれます。
- データ型がサブ配列の場合、その形状とデータ型について教えてくれます。
NumPy dtype オブジェクトの作成
以下に、dtypeオブジェクトを作成するために必要な構文を示します。
numpy.dtype(object, align, copy)
上記のコンストラクタの引数の説明は以下の通りです。
- object:この引数は、データ型に変換するオブジェクトを表すために使用されます。
- align:オプションの引数です。C コンパイラが同様の C 構造体に対して出力するものに合わせるために、フィールドにパディングを追加するために使用されます。この引数は任意のブール値に設定できます。
- copy:この引数は、
dtypeオブジェクトのコピーを作成するために使用され、またオプションの引数です。
NumPy における数値型データ型
NumPy ライブラリは主に、Python が提供するものよりもより広範な数値型データ型を提供します。数値型データ型の一覧は以下の表に示します。
| 番号 | データ型 | 説明 |
|---|---|---|
| 1 | bool_ |
真偽を表すブール値を表すために使用されます。バイトとして格納されます。 |
| 2 | int_ |
整数のデフォルト型です。主に 64 ビットまたは 32 ビット整数を含む C 言語の long 型と同じです。 |
| 3 | intc |
C 言語の整数(C int)と同様で、32 ビットまたは 64 ビットの int を表します。 |
| 4 | intp |
インデックスに使用される整数を表すために使用されます。 |
| 5 | int8 |
1 バイトと同じ 8 ビット整数です。値の範囲は -128 から 127 です。 |
| 6 | int16 |
2 バイト(16 ビット)の整数で、範囲は -32768 から 32767 です。 |
| 7 | int32 |
4 バイト(32 ビット)の整数です。範囲は -2147483648 から 2147483647 です。 |
| 8 | int64 |
8 バイト(64 ビット)の整数で、範囲は -9223372036854775808 から 9223372036854775807 です。 |
| 9 | uint8 |
1 バイト(8 ビット)の符号なし整数です。 |
| 10 | uint16 |
2 バイト(16 ビット)の符号なし整数です。 |
| 11 | uint32 |
4 バイト(32 ビット)の符号なし整数です。 |
| 12 | uint64 |
8 バイト(64 ビット)の符号なし整数です。 |
| 13 | float_ |
float64と同じです。 |
| 14 | float16 |
半精度浮動小数点数を表すために使用されます。指数には 5 ビット、仮数には 10 ビット、符号には 1 ビットが割り当てられます。 |
| 15 | float32 |
単精度浮動小数点数を表すために使用されます。指数には 8 ビット、仮数には 23 ビット、符号には 1 ビットが割り当てられます。 |
| 16 | float64 |
倍精度浮動小数点数を表すために使用されます。指数には 11 ビット、仮数には 52 ビット、符号には 1 ビットが割り当てられます。 |
| 17 | complex_ |
complex128と同じです。 |
| 18 | complex64 |
実部と虚部がそれぞれ 32 ビットを占める複素数を表すために使用されます。 |
| 19 | complex128 |
実部と虚部がそれぞれ 64 ビットを占める複素数を表すために使用されます。 |
NumPy において dtype を表すために使用される文字
NumPy においてdtypeを表すために使用される文字の一覧は以下の通りです。
i:整数b:ブール値u:符号なし整数f:浮動小数点数c:複素浮動小数点数m:時間差M:日付と時刻O:オブジェクトS:文字列U:Unicode 文字列V:その他の型(void)のための固定メモリチャンク
例
例 1: 配列のデータ型を求める
文字列が含まれる配列のデータ型を求めてみましょう。
import numpy as np
ar1 = np.array(['chair', 'book', 'notebook'])
print(ar1.dtype)
出力:
<U8
例 2: dtypeオブジェクトを構築する
numpy.dtype関数を使ってdtypeオブジェクトを作成できます。
import numpy as np
dt1 = np.dtype(np.int64)
print (dt1)
出力:
int64
例 3: 数値型データ型の短縮表記を使用する
次の例では、数値型データ型の短縮表記を使用します。
import numpy as np
a = np.dtype('i4')
print (a)
出力:
int32
例 4: 構造体付きdtypeオブジェクトを作成する
構造体付きのデータ型を作成し、ndarrayオブジェクトに適用します。
import numpy as np
## キーと値の情報
a = np.dtype([('rollno',np.int16)])
print(a)
a = np.array([(101,),(201,),(301,)], dtype=a)
print(a)
出力:
[('rollno', '<i2')]
[(101,) (201,) (301,)]
例 5: データ型を変更する
次の例では、intをパラメータ値として使用して、データ型をfloatから整数に変更します。
import numpy as np
ar= np.array([1.1, 2.1, 3.1])
newarr = ar.astype(int)
print(newarr)
print(newarr.dtype)
出力:
[1 2 3]
int64
まとめ
この実験では、配列内のデータ型の概念について学びました。dtypeオブジェクトが値のデータ型を指定するためにどのように使用されるか、その構文、およびdtypeオブジェクトに必要なパラメータについて見てきました。また、さまざまな数値型データ型とそれに対する理解を深めるためのいくつかの例についても学びました。