* generate a function with axis= option
多次元配列の任意次元に演算を行いたい場合は多い.これはpythonの標準の書き方では,関数にaxis=を引き渡すのだが,これを関数内で効率良くに扱うにはどうすればよいだろうか?
まず入力されたデータについて,演算をするべき軸が引数axisで特定されていると仮定するしよう.この場合,以下の操作で,常に演算を行う軸をaxis=1に変更できる.
szs=list(data_in.shape)
sz0=int(np.prod(szs[:axis]))
sz1=int(szs[axis])
sz2=int(np.prod(szs[axis+1:]))
data_in=data_in.reshape([sz0,sz1,sz2])
を行うことで,data_inを3次元配列[sz0, sz1, sz2]にして,かつ演算を行う配列をaxis=1に固定できる.この後で演算をaxis=1について実行する.その結果作成される出力データをdata_outとしよう.通常,このdata_outも3次元配列[sz0, sz1_out, sz2]となるべきである.したがって出力データを次のようにreshapeすれば
szs_out=szs.copy()
szs_out[axis]=sz1_out
data_out=data_out.reshape(szs_out)
入力データと同じ次元の配列で,そのaxis軸に演算が施されて結果が格納される.
ただしこの方法では演算を行う軸が常にaxis=1になるので,axis=0にしか定義されていない演算を利用する場合にはコーディングがやや複雑になるという欠点がある.そういった場合には,この方法をとるべきかどうかを適宜判断するべきだろう.