Numpyベースのndarrayのデータ型

2746 ワード

dtype(データ型)は、ndarrayがメモリを特定のデータ型として解釈するために必要な情報を含む特殊なオブジェクトです.
これもNumpyがこのように強くて柔軟な原因の一つです.多くの場合、対応するマシン表示に直接マッピングされるため、「読み書きディスク上のバイナリ・データ・ストリーム」や「C、Fortranなどの低レベル言語・コードの統合」がより簡単になります.次の表に、Numpyがサポートするすべてのデータ・タイプを示します.
を選択します.
タイプコード
説明
int8、uint8
i1、u1
シンボルとシンボルなしの8ビット(1バイト)整数
int16、uint16
i2、u2
符号と符号なしの16ビット(2バイト)整数
int32、uint32
i4、u4
符号と符号なしの32ビット(4バイト)整数
int64、unint64
i8、u8
符号付きおよび符号なし64ビット(8バイト)整数
float16  
f2
半精度浮動小数点数
float32
f 4またはf
標準の単精度浮動小数点数.Cのfloatとの互換性
float64
f 8またはd
標準の2精度浮動小数点数.CのdoubleとPythonのfloatオブジェクトと互換性があります
float128
f 16またはg
拡張精度浮動小数点数
complex64、complex128、complex256
c8、c16、c32
2つの32ビット、64ビットまたは128ビットの浮動小数点数で表される複素数
bool  
?
TrueとFalseの値を格納するブールタイプ
object
O
Pythonオブジェクトタイプ
string_
S
固定長の文字列長(1文字あたり1バイト).例えば、10の文字列を作成するには、S 10を使用する
unicode_
U
固定長unicode長(バイト数はプラットフォームで決定).文字列の定義と同様(U 10など)
ndarrayのastypeメソッドでdtypeを表示して変換できます.
注意:astypeを呼び出すと、新しいdtypeが古いdtypeと同じであっても、新しい配列(元のデータのコピー)がどうしても作成されます.
In [62]: arr=np.array([1,2,3],dtype='int64')

In [63]: arr.dtype
Out[63]: dtype('int64')

In [64]: float_arr=arr.astype(np.float64)

In [65]: float_arr.dtype
Out[65]: dtype('float64')

この例では、整数は浮動小数点数に変換されます.浮動小数点数を整数に変換すると、小数部は切り捨てられます.
注意:float 64やfloat 32などの浮動小数点数は、近似した数値のみを表すことができます.複雑な計算では、浮動小数点エラーが蓄積される可能性があるため、比較操作は一定の小数点以下でしか有効ではありません.
In [70]: float_arr=np.array([2.6,-6.3],dtype='f4')

In [71]: float_arr.astype('i4')
Out[71]: array([ 2, -6])

文字列配列がすべて数値を表す場合は、astypeで数値形式に変換することもできます.
注:変換プロセスが何らかの理由で失敗した場合(float 64に変換できない文字列など)、TypeErrorが発生します.
In [72]: numeric_strings=np.array(['1.2','-6.2'],dtype=np.string_)

In [73]: numeric_strings.astype(np.float)
Out[73]: array([ 1.2, -6.2])

In [74]: numeric_strings=np.array(['1.2','-6.2','abc'],dtype=np.string_)

In [75]: numeric_strings.astype(np.float)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
C:\Users\Administrator\Desktop\ in ()
----> 1 numeric_strings.astype(np.float)

ValueError: could not convert string to float: abc

配列のdtypeにはもう一つの使い方があります.
In [67]: int_array=np.arange(10)

In [68]: float_array=np.array([.22,.1],dtype='f8')

In [69]: int_array.astype(float_array.dtype)
Out[69]: array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])