NumPy

NumPy

配列に要素を追加する

配列にストアするデータは同じ型

numpy.append(arr, values, axis=None)

axisがNoneであれば、出力はフラット化(1次元配列)されます。

>>> import numpy as np
>>> np.append([1,2,3],[[4,5,6],[7,8,9]])
array([1, 2, 3, ..., 7, 8, 9])

配列を結合する

配列にストアするデータは同じ型。

import numpy as np

output = np.c_[data,newdata]

ndarrayの基本操作

ndarray は、N-Dimensional arrays.のことです。listクラスより使いやすい配列のクラスとしてNumPyが提供するN次元配列のクラスです。

>>> 
>>> import numpy as np
>>> a = np.array([0,0.5,1.0,1.5,2.0])
>>> a
array([0. , 0.5, 1. , 1.5, 2. ])
>>> type(a)
<class 'numpy.ndarray'>
>>> a = np.array(['a','b','c'])
>>> a
array(['a', 'b', 'c'], dtype='<U1')
>>> a = np.arange(2,20,2)
>>> a
array([ 2,  4,  6,  8, 10, 12, 14, 16, 18])
>>> a = np.arange(8,dtype=np.float)
<stdin>:1: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>>> a = np.arange(8,dtype=float)
>>> a
array([0., 1., 2., 3., 4., 5., 6., 7.])
>>> a[4:]
array([4., 5., 6., 7.])
>>> a[5:]
array([5., 6., 7.])
>>> a[:5]
array([0., 1., 2., 3., 4.])
>>> a.sum()
28.0
>>> a.mean()
3.5
>>> a.std()
2.29128784747792
>>> a.cumsum()
array([ 0.,  1.,  3.,  6., 10., 15., 21., 28.])
>>> 
関数
np.arange()
np.sum()
np.mean()
np.std()
np.cumsum()
np.exp()
np.sqrt()
 標準ライブラリのmath関数は引数で指定した数値に対してのみ適用し配列には適用できませんが、NumPyの配列に対する関数は各配列の要素、すべてに対して適用されます。

多次元配列

>>> 
>>> b = np.array([a,a*2])
>>> b
array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.],
       [ 0.,  2.,  4.,  6.,  8., 10., 12., 14.]])
>>> b[0]
array([0., 1., 2., 3., 4., 5., 6., 7.])
>>> b[0,2]
2.0
>>> b[:,2]
array([2., 4.])
>>> b.sum()
84.0
>>> b.sum(axis=0)
array([ 0.,  3.,  6.,  9., 12., 15., 18., 21.])
>>> b.sum(axis=1)
array([28., 56.])
>>> 

 多次元配列を初期化して生成します。

>>> c = np.ones((2,3,4), dtype='i', order='C')
>>> c
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int32)
>>> d = np.zeros_like(c, dtype='f', order='C')
>>> d
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]], dtype=float32)
>>> d = np.zeros_like(c, dtype=np.dtype('float64'), order='C')
>>> d
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]])
>>> d = np.zeros_like(c, dtype='f', order='C')
>>> d
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]], dtype=float32)
>>> e = np.empty((2,3,2))
>>> e
array([[[0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.]]])
>>> f = np.empty_like(c)
>>> f
array([[[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]],

       [[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]]], dtype=int32)
>>> 

  dtype データ型オブジェクト

'?'真、または 偽
'b'符号つきバイト
'B'符号なしバイト
'i'符号つき整数
'u'符号なし整数
'f'浮動小数点
'c'複素数 浮動小数点
'm'時間単位
'M'日付
'O'(Python)オブジェクト
'S','a'0で終端されたバイト
'U'ユニコード文字列
'V'Rawデータ

>>> 
>>> np.eye(5)
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])
>>> g = np.linspace(5,15,12)
>>> g
array([ 5.        ,  5.90909091,  6.81818182,  7.72727273,  8.63636364,
        9.54545455, 10.45454545, 11.36363636, 12.27272727, 13.18181818,
       14.09090909, 15.        ])
>>> g.size
12
>>> g.itemsize
8
>>> g.ndim
1
>>> g.dtype
dtype('float64')
>>> g.nbytes
96

配列の行・列、サイズの変更

 関数reshape(),resize()を使います。

>>> g = np.arange(15)
>>> g
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
>>> g.shape
(15,)
>>> np.shape(g)
(15,)
>>> g.reshape((3,5))
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> h = g.reshape((5,3))
>>> h
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14]])
>>> h.T
array([[ 0,  3,  6,  9, 12],
       [ 1,  4,  7, 10, 13],
       [ 2,  5,  8, 11, 14]])
>>> h.transpose()
array([[ 0,  3,  6,  9, 12],
       [ 1,  4,  7, 10, 13],
       [ 2,  5,  8, 11, 14]])
>>> 

h.T および h.transpose()は、hの転置行列です。

次に、サイズを変更してみます。

>>> g
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
>>> np.resize(g,(3,1))
array([[0],
       [1],
       [2]])
>>> np.resize(g,(1,5))
array([[0, 1, 2, 3, 4]])
>>> np.resize(g,(2,5))
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
>>> 

-NumPy
-