「numpy」カテゴリーアーカイブ

関数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の使い方の例

関数ndarray.compressの使い方の例

関数の機能:選択した位置のスライスを返却

例1 : 2次元の配列を縦方向(axis=0)に選択

>>> a = np.array([[3, 5],
	          [1, 6],
	          [9, 4]])
>>> a.compress([True, False, True], axis=0)
array([[3, 5],
       [9, 4]])
ndarray.compressの説明図(axis=0)

例2 : 2次元の配列を横方向(axis=1)に選択

>>> a.compress([False, True], axis=1)
array([[5],
       [6],
       [4]])
ndarray.compressの説明図(axis=1)
関連項目
関数ndarray.chooseの使い方の例
関数ndarray.takeの使い方の例

関数ndarray.flattenの使い方の例

関数の機能:次元を1に落とした配列を返却

>>> a = np.array([[0, 1],
	          [2, 3]])
>>> a.flatten()
array([0, 1, 2, 3])

上のようにパラメータを指定しないと、行を優先した並びとなりますが、order=’F’と指定すると列を優先した並びとなります。

>>> a.flatten(order='F')
array([0, 2, 1, 3])
関連項目
関数ndarray.ravelの使い方の例
関数ndarray.reshapeの使い方の例
関数ndarray.resizeの使い方の例
関数ndarray.squeezeの使い方の例
属性ndarray.ndimの使い方の例
属性ndarray.shapeの使い方の例
属性ndarray.size, ndarray.itemsize, ndarray.nbyteの使い方の例
属性ndarray.stridesの使い方の例

関数ndarray.diagonalの使い方の例

関数の機能:対角要素の配列を返却

>>> a = np.array([[15,  6,  2],
	          [-2, 16,  7],
	          [-8, -3, 17]])
>>> a.diagonal()
array([15, 16, 17])
>>> a.diagonal(offset=1)
array([6, 7])
>>> a.diagonal(offset=2)
array([2])
>>> a.diagonal(offset=-1)
array([-2, -3])
>>> a.diagonal(offset=-2)
array([-8])
offsetのデフォルト値は0で、offset=0なら主対角線上の要素が返却されます。プラスなら右上に、マイナスなら左下に主対角線からずれた位置の対角要素が返却されます。
関連項目
関数ndarray.traceの使い方の例

関数ndarray.cumsumと関数ndarray.cumprodの使い方の例

cumsumの機能:指定した軸方向の累計を返却

sumprodの機能:指定した軸方向の累計積を返却

例1 : 1次元の配列の場合

>>> a = np.array([5, 4, 6, 3, 7])
>>> a.cumsum()
array([ 5,  9, 15, 18, 25])
>>> a.cumprod()
array([   5,   20,  120,  360, 2520])

例2 : 2次元の配列の場合

>>> a = np.array([[3, 5, 7],
	          [6, 8, 1],
	          [4, 1, 7]])
>>> a.cumsum(axis=0)
array([[ 3,  5,  7],
       [ 9, 13,  8],
       [13, 14, 15]])
>>> a.cumsum(axis=1)
array([[ 3,  8, 15],
       [ 6, 14, 15],
       [ 4,  5, 12]])
>>> a.cumprod(axis=0)
array([[ 3,  5,  7],
       [18, 40,  7],
       [72, 40, 49]])
>>> a.cumprod(axis=1)
array([[  3,  15, 105],
       [  6,  48,  48],
       [  4,   4,  28]])
関連項目
関数ndarray.prodの使い方の例
関数ndarray.sumの使い方の例
関数ndarray.traceの使い方の例

関数ndarray.copyの使い方の例

関数の機能:配列のコピーを返却

例 : 整数型から浮動小数点型へ変換

>>> a = np.array([0, 1, 2])
>>> b = a.copy()
>>> a
array([0, 1, 2])
>>> b
array([0, 1, 2])

配列bは配列aとは別のオブジェクトなので、配列bの要素を変更しても配列aには影響しません。

>>> b[2]=10
>>> a
array([0, 1, 2])
>>> b
array([ 0,  1, 10])

ところが、copy関数を使わずに単にb=aと書くと、配列aにbという別名を付けたことになります。なので、bの中身を変更するとaの中身を変更したことになります。

>>> b = a
>>> b[2] = 10
>>> a
array([ 0,  1, 10])
関連項目
関数ndarray.viewの使い方の例

関数ndarray.clipの使い方の例

関数の機能:最小値と最大値を指定して要素の値を切り揃えた配列を返却

>>> a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a.clip(2, 7)
array([2, 2, 2, 3, 4, 5, 6, 7, 7, 7])
>>> a.clip(1, 5)
array([1, 1, 2, 3, 4, 5, 5, 5, 5, 5])
clip関数の1つ目のパラメーターが最小値、2つ目のパラメーターが最大値です。
指定した最小値以下だった要素は指定した最小値になり、指定した最大値以上だった要素は指定した最大値になり、その他の要素は元の値のまま、の配列が返却されます。