NumpyのTIPS
目次
Numpyの数学関数
- Numpyの主要な数学関数一覧
Numpyの統計処理
Numpyの統計処理一覧
- 統計処理のインスタンスメソッド一覧(dataがインスタンスの場合)
dataがPandasのSeriesやNumpyのndarrayの場合
median、skew、kurtosisは、PandasのSeriesのみで利用可能
Numpyの統計処理一覧(欠損あり)
- Numpyの統計処理(欠損処理あり)
dataがPandasのSeriesやNumpyのndarrayの場合
data.nanmean()のようには使用できない
Numpyの判定関数
スカラー判定
オブジェクトがスカラーか判定する
*
np.isscalar(var)数値、文字列、bool値はTrue、リスト、タプル、ndarrayなどはFalse
*
numpy.isscalar
参照数であるかどうかを判定
数であることを判定したい場合には、以下のようにisinstanceを使う
import numbers isinstance(x, numbers.Number)
Numpyのデータ形式
Numpyのデータ型一覧
- Numpyのデータ型一覧
dtype=np.'型コード'
Numpyバイナリデータ読み書きの書式一覧
- Numpyバイナリデータ読み書きの書式一覧
読み込む場合:d = np.fromfile('ファイル名', dtype='コード')
書き出す場合:np.array(d).astype('コード').tofile('ファイル名')
単精度浮動小数点型のコードはf4をfと省略可能
Numpyの配列
配列ndarrayの作成
- 配列ndarrayの作成(既存のデータから)
入力データvarはlistなどnp.array(var)
- 配列ndarrayの作成(作成後に形状変更)
入力データvarの要素数が6で(3, 2)の2次元配列にする場合np.array(var).reshape(3, 2)
- 配列ndarrayの作成(定数)
配列全部を同じ値に初期化するa = np.zeros((ndim, kdim, jdim, idim)) # 全ての要素が0 b = np.ones((ndim, kdim, jdim, idim)) # 全ての要素が1 c = np.ones((ndim, kdim, jdim, idim)) * 10.0 # 全ての要素が10 d = np.zeros((ndim, kdim, jdim, idim), dtype=np.int32) # 全ての要素が0、整数型を指定
idim:経度方向のグリッド数、jdim:緯度方向のグリッド数、kdim:高度方向のグリッド数、ndim:時間方向のグリッド数
Numpyで利用可能な型はNumpyのデータ型一覧参照
配列の要素の置換
- 条件を満たす要素の置換
負の値を0に置換var[var <= 0] = 0
- 条件が真と偽で置換する値を変える
負の値なら-1、正の値なら0に置換するvar = np.where(var <= 0, -1, 0)
配列の軸の入れ替え
- 配列の転置
varが2次元の行列の場合、次のいずれでも可能var = var.T var = np.transpose(var)
- 配列の成分入れ替え
配列varの成分を3、0、2、1の順に入れ替えるvar = var.transpose(3, 0, 2, 1)
- 内積
配列x、yの内積を計算するnp.dot(x, y)
Numpy配列成分の演算
Numpyの機能で演算できる場合は極力そちらを使い、ループは用いない
- 経度、緯度方向のループを回す場合
itertoolsを使うとループを1重化して高速化できるimport itertools i_list = np.arange(idim) j_list = np.arange(jdim) for ij in itertools.product(i_list, j_list): i = ij[0] j = ij[1] 処理
配列の平均操作
指定した軸で平均を作成する
- 2次元目の平均を作成する
d2 = d.mean(axis=1)
*dが2次元以上の配列の場合
*Numpyの統計処理参照 - 時間、高度、経度、緯度の4次元配列で時間平均
d2 = d.mean(axis=0)
*0次元目に時間軸が入っている場合 - 経度、緯度の2次元配列で東西平均からの偏差
d2 = d - np.expand_dims(d.mean(axis=1), axis=1)
*np.expand_dimsで2次元目を追加し、元のdと次元を合わせて演算可能にしている
*例えば、dが64×128なら、d.mean(axis=1)で64になった配列が、np.expand_dimsで64×1になる - 経度、緯度の2次元配列で指定したグリッドで平均
d2 = d[jmin:jmax, imin:imax].mean(axis=0).mean(axis=0)
*jmin:jmax、imin:imaxの範囲を取り出し平均する
*jmin:jmaxではjmaxの1つ前まで取り出されるので注意 - 条件を満たす要素を平均
d2 = d[lats >= 60].mean()
緯度が60度以上の場合に平均
*配列dと配列latsのサイズは同じでないとエラー - 複数の条件を満たす要素を平均
d2 = d[(lats >= 60)*(lons>120)*(lons=180)].mean()
緯度が60度以上、経度が120〜180度の場合に平均 - データに欠損値が含まれる場合
d2 = np.nanmean(d[(lats >= 60)*(lons>120)*(lons=180)])
緯度が60度以上、経度が120〜180度の場合に欠損値を除いて平均
[top]