関数ndarray.getfieldの使い方の例

関数の機能:各要素のデータの一部分を指定した型のデータとした配列を返却

例1 : 文字列型の一部を取り出した配列を作る

a = np.array(['abcde', 'fghij', '12345', 'xyz'])
>>> a.getfield('U1')           # 1文字目を取り出す
array(['a', 'f', '1', 'x'], dtype='<U1')
>>> a.getfield('U1', offset=4) # 2文字目を取り出す
array(['b', 'g', '2', 'y'], dtype='<U1')
>>> a.getfield('U2', offset=8) # 3〜4文字目を取り出す
array(['cd', 'hi', '34', 'z'], dtype='<U2')
offset には、取り出したいデータの位置をバイト数で指定します。上の例では、一文字が4バイトなので、2文字目から取り出す時はoffset=4、3文字目から取り出す時はoffset=8としています。
なお、データの大きさは下記のように配列の1要素のサイズを調べることにより把握できます。この例では5文字で20バイトなので、1文字は4バイトということが判ります。
>>> a.dtype.itemsize    # 1要素のバイト数
20
>>> a.dtype
dtype('<U5')

例2 : 複素数型の配列から実数部分と虚数部分をそれぞれ取り出した配列を作る

>>> a = np.ones((2,2)) + np.eye(2) * 2j
>>> a
array([[1.+2.j, 1.+0.j],
       [1.+0.j, 1.+2.j]])
>>> a.getfield(np.float64)           # 実数部分を取り出す
array([[1., 1.],
       [1., 1.]])
>>> a.getfield(np.float64, offset=8) # 虚数部分を取り出す
array([[2., 0.],
       [0., 2.]])
この例では、16バイトの複素数型データから、8バイトの実数部分と8バイトの虚数部分とを、それぞれ8バイトの浮動小数点型(np.float64)として取り出した配列を作っています。
なお、複素数型のデータの大きさは下記のようにして調べることができます。
>>> a.dtype.itemsize    # 1要素のバイト数
16
>>> a.dtype
dtype('complex128')
関連項目
関数ndarray.byteswapの使い方の例
関数ndarray.newbyteorderの使い方の例
関数ndarray.setfieldの使い方の例