Python – 2-3.numpy –
配列の演算
初期値
nary1 = np.arange(6).reshape(2,3) nary2 = np.ones((2,3)) nary3 = np.ones((3,2)) nary4 = np.full((2,3) ,2)
加算
nary1 + nary2 ==> array([[1., 2., 3.], [4., 5., 6.]])
減算
nary1 - nary2 ==> array([[-1., 0., 1.], [ 2., 3., 4.]])
乗算
np.dot(nary1, nary3) ==> array([[ 3., 3.], [12., 12.]])
転置(T)
nary1.T ==> array([[0, 3], [1, 4], [2, 5]])
四則計算
加算(add)
np.add(nary1, nary2) ==> array([[1., 2., 3.], [4., 5., 6.]])
減算(subtract)
np.subtract(nary1, nary2) ==> array([[-1., 0., 1.], [ 2., 3., 4.]])
乗算(multiply)
np.multiply(nary1, nary4) ==> array([[ 0, 2, 4], [ 6, 8, 10]])
除算(divide)
np.divide(nary1, nary4) ==> array([[0. , 0.5, 1. ], [1.5, 2. , 2.5]])
累乗 (power)
np.power(2,3) ==> 8 nary1 = np.arange(6).reshape(2,3) np.power(nary1,3) ==> array([[ 0, 1, 8], [ 27, 64, 125]], dtype=int32)
平方根 (sqrt)
np.sqrt(9) ==> 3.0 np.sqrt(np.array([[4,9,16], [25,36,49]])) ==> array([[2., 3., 4.], [5., 6., 7.]])
三角関数 (np.sin、np.cos、np.tan)
※引数となる角度はラジアン単位で指定。ラジアンはnp.radiansで取得可能 例)45度の場合 np.radians(45) = 45 * np.pi / 180 = 0.7853981633974483 例)90度の場合 np.radians(90) = 90 * np.pi / 180 = 1.5707963267948966 例)180度の場合 np.radians(180) = 180 * np.pi / 180 = 3.141592653589793
・ 角度=ラジアン=0のとき
np.sin(np.radians(0)) ==> 0.0 np.cos(np.radians(0)) ==> 1.0 np.tan(np.radians(0)) ==> 0.0
・リストで複数を同時に指定することも可能
np.sin(np.radians([0,30,45,90])) ==> array([0. , 0.5 , 0.70710678, 1. ]) np.cos(np.radians([0,30,45,90])) ==> array([1.00000000e+00, 8.66025404e-01, 7.07106781e-01, 6.12323400e-17]) np.tan(np.radians([0,30,45,90])) ==> array([0.00000000e+00, 5.77350269e-01, 1.00000000e+00, 1.63312394e+16])
・πが無理数で小数点以下の桁数が大きくなるためnp.roundで四捨五入
np.round(np.sin(np.radians([0,30,45,90])), 3) ==> array([0. , 0.5 , 0.707, 1. ]) np.round(np.cos(np.radians([0,30,45,90])), 3) ==> array([1. , 0.866, 0.707, 0. ]) np.round(np.tan(np.radians([0,30,45,60])), 3) # 90は無限大なので ==> array([0. , 0.577, 1. , 1.732])
ソート関数(np.sort, np.argsort)
普通のソート
nary = np.array([6,2,0,9,7,4]) ==> array([6, 2, 0, 9, 7, 4]) np.sort(nary) ==> array([0, 2, 4, 6, 7, 9])
二次元配列のソート
nary = np.array([[6,0,7],[9,7,3]]) ==> array([[6, 0, 7], [9, 7, 3]]) ※デフォルトは行ごとにソート np.sort(nary) ==> array([[0, 6, 7], [3, 7, 9]])
列ごと(縦方向)にソート
np.sort(nary, axis=0) ==> array([[6, 0, 3], [9, 7, 7]]) ※デフォルトはaxis=1 np.sort(nary, axis=1) ==> array([[0, 6, 7], [3, 7, 9]])
argsort ソートした際の、元の値のINDEXを返す
nary = np.array([[6,0,7],[9,7,3]]) np.argsort(nary) ==> array([[1, 0, 2], [2, 1, 0]], dtype=int32)
欠損値np.nanの扱い
nan値の代入
## 明示的に欠損値NaNを生成したいときはnp.nanやfloat('nan')などを使う nary = np.ones((2,3)) nary[0,0]=9 nary[1,1]=np.nan nary[1,2]=float(np.nan) ==> array([[ 9., 1., 1.], [ 1., nan, nan]])
nan値の判定
・np.isnan
True if np.isnan(nary[1,1]) else False ==> True
・"=="では判定不可
True if nary[1,1] == np.nan else False ==> False
・math.isnan
True if math.isnan(nary[1,1]) else False ==> True
・np.nan_to_num()で他の値に置換
True if np.isnan(np.nan_to_num(nary[1,1], 999)) else False ==> False
nanを含むndarrayの集計
nary = array([[ 0., 1., nan, 512.], [ 1., 2., nan, 128.], [ 2., 3., nan, 256.], [ 3., 4., 999., 4.]])
・nansum()でnanを含むndarrayの合計算出
np.nansum(nary) ==> 1915.0 ==> (0+1+2+3+1+2+3+4+999+512+128+256+4) = 1915
・axis=0 で列毎の合計
np.nansum(nary, axis=0) ==> array([ 6., 10., 999., 900.]) ==> (1+2+3 = 6, 1+2+3+4 = 10, 999, 512+128+256+4 = 900)
・axis=1 で行毎の合計
np.nansum(nary, axis=1) ==> array([ 513., 131., 261., 1010.]) ==> (1+512 = 513, 1+2+128 = 131, 2+3+256 = 261, 3+4+999+4 = 1010)
合計と同様に、最大、最小、平均、分散、標準偏差関数が用意されている
np.nanmean(), np.nanmax(), np.nanmin(), np.nanstd(), np.nanvar()
・最大 np.nanmax(nary) ==> 999.9 ・最小 np.nanmin(nary) ==> 0.0 ・平均 np.nanmean(nary) ==> 147.30769230769232 ・分散 np.nanvar(nary) ==> 81540.82840236685 ・標準偏差 np.nanstd(nary) ==> 285.553547346845
最近のコメント